Создание простого сервиса на 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