Создание простого сервиса на node.js
Задача: сделать сервис, отдающий 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
