- PVSM.RU - https://www.pvsm.ru -

Web-разработка на node.js и express. Изучаем node.js на практике

Предисловие

Пришла мне в голову смелая мысль, взяться за написание туториала по разработке на node.js (что-то наподобие ruby.railstutorial.org [1]). Так как я первый раз берусь за подобный труд то для для меня очень важен любой фидбэк. Нужно это — не нужно. Что стоит убрать а на чем остановиться подробнее, в общем любая конструктивная критика. Надеюсь что дело пойдет и вам понравится, в этом случае по мере написания буду выкладывать главы на хабр.

Вступление

Приветствую, перед вами небольшой учебник по практической разработке на node.js, с использованием фреймворка express. Я с большим энтузиазмом отношусь к node и сопутствующим технологиям. Node.js в первую очередь привлекает свежестью в подходах к разработке, смелостью и драйвом.

О том, что такое node.js вы можете прочитать на http://nodejs.org/ [2], если коротко — то это серверная платформа, для выполнения javascript. Так же мы будем использовать express, web-фреймворк построеный на концепции middleware [3] (о том, что это такое, поговорим поподробнее чуть позже)

В процессе изучения мы познакомимся с различными аспектами web-разработки, такими как использование системы контроля версий, автоматическое тестирование и так далее. В результате по ходу изучения мы разработаем вполне рабочее web-приложение (простенький аналог твиттера)

Хочется отметить, что очень большое влияние на меня оказал railstutorial [4], это лучшее пособие по web-разработке, которое я встречал, и мне очень хотелось бы создать нечто подобное для node.js.

Глава 1. Старт

В этой главе мы развернем рабочее окружение с нуля, установим все необходимые инструменты, создадим простенькое приложение и даже запустим его на облачном хостинге [5].

1.1 Рабочее окружение

Так как я в основном использую в работе linux, а если точнее — Ubuntu 12.04, основная часть инструкций по установке тех или иных инструментов будет ориентирована на ползователей линукс, но я буду стараться по возможности давать ссылки на инструкции и для других ОС.

Для того чтобы точно следовать инструкциям в учебнике, вам нужно будет поставить систему контроля версий git [6], дело в том, что мы не только будем размещать код своих проектов в git, но и устанавливать многие инструменты из репозиториев на гитхабе [7].

Так что, первое что мы сделаем — это…

1.1.1 Установка git

Пользователи apt-based дистрибутивов могут выполнить в терминале:

$ sudo apt-get install git-core

Остальные отправляются читать инструкции по адресу http://git-scm.com/book/ch1-4.html [8]

1.1.2 Установка node.js и npm

Теперь пришло время поставить последнюю стабильню версию node.js (на текущий момент это 0.8.1) и npm (установщик пакетов для node).

Инструкции по установке разных ОС можно найти здесь [9]

Для начала устанавливаем все что необходимо для компиляции пакета из исходников:

$ sudo apt-get install python g++ curl libssl-dev apache2-utils

Теперь скачиваем исходный код:

$ cd /tmp
$ git clone https://github.com/joyent/node.git
$ cd node
$ git checkout v0.8.1

Посделний этап — компиляция и установка:

$ ./configure
$ make
$ sudo make install

Когда все благополучно завершится, можно проверить версии пакетов, должно получиться:

$ node -v
v0.8.1
$ npm -v
1.1.33

Если есть желание — можно запустить консоль node и поиграться с интерпретатором javascript.

1.1.3 Среда разработки

Тут каждый волен выбирать по своему вкусу, лично меня вполне устраивает gedit с установленным набором плагинов gmate [10]. Вполне подходят Netbeans или Webstorm.

1.1.4 Express и первое приложение

Теперь пришло время познакомиться с фреймворком express [11]. Фреймворк очень простой, и вполне приемлемо документированный. Единственный неудобный момент — это то, что мы будем использовать бета версию 3.0.x а документация на официальном сайте написана для 2.x, так что советую иметь под рукой migration guide [12]

Устанавливаем express глобально:

$ sudo npm install -g express@3.0

Создаем директорию для наших учебных проектов:

$ mkdir -p ~/projects/node-tutorial
$ cd ~/projects/node-tutorial

Создаем проект и устанавливаем зависимости:

$ express node-demo-app
$ cd hello && npm node-demo-app

Теперь можно заглянуть в то что нам сгенерировал генератор приложений, вот внутренности app.js:

/**
 * Module dependencies.
 */

var express = require('express')
  , routes = require('./routes')
  , http = require('http');

var app = express();

app.configure(function(){
  app.set('port', process.env.PORT || 3000);
  app.set('views', __dirname + '/views');
  app.set('view engine', 'jade');
  app.use(express.favicon());
  app.use(express.logger('dev'));
  app.use(express.bodyParser());
  app.use(express.methodOverride());
  app.use(app.router);
  app.use(express.static(__dirname + '/public'));
});

app.configure('development', function(){
  app.use(express.errorHandler());
});

app.get('/', routes.index);

http.createServer(app).listen(app.get('port'), function(){
  console.log("Express server listening on port " + app.get('port'));
});

Думаю, что люди знакомые с javascript могут предположить что тут происходит. Подключаются необходимые модули, конфигурируется приложение и запускается на 3000-м порту.

Теперь приложение можно запустить:

$ node app

И увидеть результат работы http://localhost:3000/ [13]

1.2 Система контроля версий

Теперь, когда у нас уже есть рабочее приложение, более подробно коснемся работы с сисемой контроля версий. Для того чтобы лучше познакомиться с работой git, стоит почитать книжку Pro Git [14], но можно и обойтись инструкциями в данном учебнике.

1.2.1 Настройка git

Для более комфортной работы с git стоит сначала указать свои личные данные:

$ git config --global user.name "Your Name"
$ git config --global user.email your.email@example.com

И настроить алиасы для наиболее часто используемых комманд:

$ git config --global alias.co checkout
$ git config --global alias.ci commit

1.2.2 Работа с git

Git настроен и можно размещать наше приложение в репозитории, инициализируем новый репозиторий:

$ git init

Добавляем директорию с зависимостями приложения в gitignore:

$ echo '/node_modules' > .gitignore

Помещаем все файлы в индекс и создаем первый коммит:

$ git add .
$ git ci -m "Initial commit"

1.2.3 github

После размещения кода проекта в репозитории пришло время выложить проект на GitHub [15]. GitHub — это социальная сеть и хостинг [5] для проектов. Огромное число opensource проектов хостится [5] на гитхабе, так что если вы там еще не зарегистрированы — самое время сделать это [16] (возможно вам придется сначала разобраться с ssh ключами [17])

Создаем [18] новый репозиторий node-demo-app.

Выкладываем код на гитхаб:

$ git remote add origin git@github.com:ваш_ник_на_гитхабе/node-demo-app.git
$ git push -u origin master

1.3 Разворачиваем приложение

Теперь наступает самый волнующий этап, мы будем разворачивать приложение на хостинге [5].
Для этого воспользуемся услугами облачной системы деплоя Heroku [19].

1.3.1 Настройка Heroku

Для начала нам надо зарегистрироваться [20] и установить необходимый инструментарий [21].

Пользователи ubuntu выполняют:

$ wget -qO- https://toolbelt.heroku.com/install.sh | sh

Когда установка завершится, нужно будет залогиниться из коммандной строки:

$ heroku login

1.3.2 Размещаем приложение на heroku

Теперь наше окружение полностью готов к выкладке на хостинг [5]. Размещение node.js проекта на Heroku требует еще нескольких действий, вы можете почитать об этом в документации [22] или просто выполнить инструкции.

В файле package.json нашего проекта, нужно указать версии ноды и npm, package.json должен выглядеть так:

{
  "name": "application-name",
  "version": "0.0.1",
  "private": true,
  "scripts": {
    "start": "node app"
  },
  "dependencies": {
    "express": "3.0.0beta4",
    "jade": "*"
  },
  "engines": {
    "node": "0.8.x",
    "npm": "1.1.x"
  }
}

Теперь в корне проекта создаем файл Procfile:

$ echo 'web: node app.js'  > Procfile

Проверяем что все запускается с помощью менеджера процессов:

$ foreman start

Приложение должно быть доступно на http://localhost:5000/ [23]

Добавляем файлы в репозиторий:

$ git add .
$ git ci -m "Added Procfile and engines"
$ git push

Создаем приложение на heroku:

$ heroku create
$ git push heroku master

Набираем:

$ heroku open

и любуемся задеплоеным приложением.

Автор: f0rk


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/javascript/10672

Ссылки в тексте:

[1] ruby.railstutorial.org: http://ruby.railstutorial.org

[2] http://nodejs.org/: http://nodejs.org/

[3] middleware: http://stephensugden.com/middleware_guide/

[4] railstutorial: http://ruby.railstutorial.org/ruby-on-rails-tutorial-book

[5] хостинге: https://www.reg.ru/?rlink=reflink-717

[6] git: http://ru.wikipedia.org/wiki/Git

[7] гитхабе: https://github.com/

[8] http://git-scm.com/book/ch1-4.html: http://git-scm.com/book/ch1-4.html

[9] здесь: https://github.com/joyent/node/wiki/Installation

[10] gmate: https://github.com/gmate/gmate/

[11] express: http://expressjs.com/

[12] migration guide: https://github.com/visionmedia/express/wiki/Migrating-from-2.x-to-3.x

[13] http://localhost:3000/: http://localhost:3000/

[14] Pro Git: http://git-scm.com/book

[15] GitHub: http://github.com/

[16] сделать это: http://github.com/signup/free

[17] разобраться с ssh ключами: https://help.github.com/articles/generating-ssh-keys

[18] Создаем: https://github.com/new

[19] Heroku: http://www.heroku.com/

[20] зарегистрироваться: https://api.heroku.com/signup

[21] инструментарий: https://toolbelt.heroku.com/

[22] документации: https://devcenter.heroku.com/articles/nodejs

[23] http://localhost:5000/: http://localhost:5000/