Документация

Node.js

Node.js все больше завоевывает популярность среди веб-разработчиков. Однако в виду отсутствия хостинговых предложений на данный момент, Node.js остается прерогативой выделенных серверов и VPS. Вобщем-то последнее по карману даже небольшому проекту :)

Более подробно ознакомиться с документацией можно на официальном сайте nodejs.org и на сайте nodebeginner.ru, где есть учебное пособие для начинающих на русском языке.

Как известно, Node.js поддерживает модули. Папка для глобальных модулей: \winginx\nodejs\node_modules\. Модули, установленные в эту папку, доступны во всех скриптах (в рамках сервера Winginx). Вы можете использовать их или создавать копию в домашней директории сайта.

В сборку Winginx включен менеджер модулей NPM, популярный фреймворк Express.js и шаблонизатор Jade.

Для отладки подключен модуль Node-Inspector. Он запускается как Node.js сервер, получить к нему доступ можно по адресу: http://localhost:8080/ (заметим, что он работает только в webkit-совместимом браузере, например, в Google Chrome).

Кроме того, для работы с базами подключены модули MongoDB и MySQL.

В кратце можно сказать, что Node.js, в отличие от того же PHP, не интерпретируется, а компилируется в самостоятельный сервер. А следовательно занимает какой-то порт. В связке с nginx он работает как backend-сервер, отрабатывая динамические запросы, а nginx же занимается статикой.

Рассмотрим пример. Возьмем за основу пример Node.js-сервера с сайта разработчика:

var http = require('http');

http.createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end('Hello World\n');
}).listen(1337, '127.0.0.1');

console.log('Server running at http://127.0.0.1:1337/');

Сохраним этот скрипт в файл home/nodejs.local/server.js.

Вот так будет выглядеть примерный конфиг в nginx:

server {
  listen       127.0.0.1:80;
  server_name  nodejs.local www.nodejs.local;

  root   home/nodejs.local/public_html;
  index  index.html;

  log_not_found off;
  charset utf-8;

  location / {
    if (!-e $request_filename) {
      proxy_pass http://localhost:1337;
    }
  }
}

Обратите внимание на порт, он должен совпадать в nginx с тем, на что завязывается Node.js-скрипт.

Осталось сообщить Winginx о том, что нужно запустить наш сервер на Node.js. Сделать это можно с помощью программы Winginx TM или вручную, добавив строчку в конфиг nodejs\node.conf:

server = home/nodejs.local/server.js

Перезапустив Winginx, можно обратиться в браузере по адресу http://nodejs.local/ к нашему сайту. (Не забыв, конечно же, про добавление домена nodejs.local в файл hosts).

Можно ли использовать Node.js совместно с PHP в рамках одного сайта?

Конечно, можно! Для этого нужно определить, что мы будем отдавать на обработку PHP, а что на Node.js.

Это может быть отдельный урл для Node.js-сервиса. Например, мы хотим, чтобы весь сайт был на PHP, а чат обслуживался на Node.js по адресу http://site.local/chat/. Значит, нужно создать локейшн /chat/ и передавать управление Node.js (нужно учесть, что в папке /chat/ могут быть картинки и прочие статичные файлы для чата, поэтому нужно отдавать Node.js только те запросы, файлов на которых нет).

Посмотрите пример конфигурации.

Рекумендуемые ресурсы

EXPRESS-JS.RU — Русскоязычный сайт по Node.js, Express.js и Jade

NODEGUIDE.RU — Руководство, уроки и многое другое по Node.js

NODEBEGINNER.RU — Node.js для начинающих

Winginx © Alexei Shabalin, 2011-2016