Pull to refresh

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

Website development *JavaScript *Node.JS *

Предисловие



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

Вступление



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

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

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

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

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



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

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



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

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

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

1.1.1 Установка git



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

$ sudo apt-get install git-core


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

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



Теперь пришло время поставить последнюю стабильню версию node.js и npm (установщик пакетов для node). Инструкции по установке разных ОС можно найти здесь. Для установки на ubuntu выполняем:

$ sudo apt-get install python-software-properties
$ sudo add-apt-repository ppa:chris-lea/node.js
$ sudo apt-get update
$ sudo apt-get install nodejs npm


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

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



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

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



Теперь пришло время познакомиться с фреймворком express. Фреймворк очень простой, и вполне приемлемо документированный.

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

$ sudo npm install -g express


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

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


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

$ express first-app
$ cd first-app && npm install


Желающие могут покопаться в том что нам сгенерировал генератор приложений, думаю, что люди знакомые с javascript могут предположить что там происходит.

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

$ node app


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

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



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

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. GitHub — это социальная сеть и хостинг для проектов. Огромное число opensource проектов хостится на гитхабе, так что если вы там еще не зарегистрированы — самое время сделать это.

Перед тем как работать с GitHub нужно будет создать RSA ключи для доступа по ssh. Процедура описана тут. Для пользователей linux привожу инструкцию по созданию ключей если их у вас еще нет.

$ ssh-keygen -t rsa -C "your_email@youremail.com"


Отвечаем на вопросы генератора, после чего копируем содержимое файла ~/.ssh/id_rsa.pub:

$ sudo apt-get install xclip
$ xclip -sel clip < ~/.ssh/id_rsa.pub


После этого нужно пройти по ссылке Account Settings, зайти в раздел SSH Keys и нажать кнопку Add SSH Key и вставить ключ из буфера обмена в поле Key. Затем сохранить.

Проверить что ключ работает можно так:

$ ssh -T git@github.com


Возможно вы увидете предупреждение:

The authenticity of host 'github.com (207.97.227.239)' can't be established.
# RSA key fingerprint is 16:27:ac:a5:76:28:2d:36:63:1b:56:4d:eb:df:a6:48.
# Are you sure you want to continue connecting (yes/no)?


Нужно просто ответить 'yes' и тогда, если ключ успешно добавился, вы увидите ответ сервера:

Hi username! You've successfully authenticated, but GitHub does not
# provide shell access.


Когда ключи настроены создаем новый репозиторий с названием first-app и дефолтными настройками, после чего выкладываем код на гитхаб:

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


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



Теперь наступает самый волнующий этап, мы будем разворачивать приложение на хостинге.
Для этого воспользуемся услугами облачной системы деплоя Heroku. Если вам интересно как работает хостинг Heroku, советую поизучать их раздел How it Works

1.3.1 Настройка Heroku



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

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

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


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

$ heroku login


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



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

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

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


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

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


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

$ foreman start


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

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

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


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

$ heroku create
$ heroku keys:add ~/.ssh/id_rsa.pub
$ git push heroku master


Набираем:

$ heroku open


и любуемся задеплоеным приложением.
Tags:
Hubs:
Total votes 74: ↑63 and ↓11 +52
Views 117K
Comments Comments 64