Создание простого сервиса на node.js

15.07.2014 at 03:14

Education concept: computer keyboard with word Learn on enter button background, 3d render

Задача: сделать сервис, отдающий JSON по некоторым запросам.
Сервис я решил делать на node.js.

Общие сведения

node.js — серверный javascript. Содержит встроенный веб сервер, т.е. не нуждается в установке apache или nginx.
Сам по себе node.js умеет очень мало. Вся функциональность содержится в модулях. Для работы с модулями используется специальный пакетный менеджер npm.

connect

connect — модуль, позволяющий расширить функциональность базового веб сервера.
Делается это за счет дополнений, из которых, как из кирпичиков, собирается приложение.
Пример дополнения:

function logger(req,res,next){
  console.log('%s%s',req.method,req.url);
  next();
}
  • req — объект запроса
  • res — объект ответа
  • next — следующее дополнение

Таким образом, каждое дополнение выполняет свою задачу и при необходимости вызывает следующее.
Код приложения получается таким:

var app = connect();
app.use(logger);
app.listen(80);

Роутинг

Делается очень просто: при подключении дополнения указывается, для какой области приложения оно должно работать.

var app = connect();
app.use(logger);
app.use('/area', somefunction);
app.listen(80);

Встроенные дополнения

connect содержит несколько встроенных дополнений. Нам нужны вот такие:

  • compress — сжимает ответ
  • query — разбирает строку запроса и сохраняет ее в req.query

Код сервиса

// Подключаем connect.
var connect = require('connect');

// Обработать первый запрос
function process_return_request(req, res, next)
{
  res.setHeader('Content-Type', 'application/json');
  res.end(JSON.stringify(req.query));
}

// Обработать второй запрос
function process_app_info(req, res, next)
{
  res.setHeader('Content-Type', 'application/json');
  var app_info = new Object();
  app_info.author = "lsreg";
  app_info.name = "cool demo app";
  res.end(JSON.stringify(app_info));
}

var app = connect();
app.use(connect.compress());
app.use(connect.query());
app.use('/return_request', process_return_request);
app.use('/app_info', process_app_info);
app.listen(80);

Создание сервиса

Устанавливаем node.js и mcedit

sudo apt-get install nodejs
sudo apt-get install npm
sudo apt-get install nodejs-legacy
sudo apt-get install mc

Создаем файл приложения

cd /var
mkdir www
cd www
touch server.js
mcedit server.js

Устанавливаем модуль connect версии 2.16.2

npm install connect@2.16.2

Стартуем приложение

nodejs server.js

Проверяем — работает. Теперь нужно, чтобы приложение работало как сервис. Для этого нам нужен модуль forever.
Устанавливаем его

npm install -g forever

И запускаем сервис

forever start server.js