4. 4
История Node.js
• Разработка с 2009 – Ryan Dahl
• Поддержка Joyent
• Событийный асинхронный I/O
• V8 JavaScript от Google
• libUV - ядро Node
– событийный ввод-вывод
• Кроссплатформенный (native)
5. 5
Где и почему?
• Node.js = JavaScript + Асинхронность
• Приложения реального времени
– Чаты
– Серверы игр
– Серверы Push-уведомлений
• Нагруженные прокси
• Сервисы с большим числом клиентов
• Везде, где время I/O больше вычислений
12. Глобальные переменные модуля
• module = {exports:{}, ...};!
– Объект описывающий данный модуль
• exports = {};!
– Объект экспорта данного модуля
• require(moduleName): *!
• __filename!
• __dirname!
http://nodejs.org/api/modules.html
http://nodejs.org/api/globals.html
13. 13
require()
• Формат: .js .json .node
– Может быть любой формат (нужно прописать правило)
– Нативные модули на C++
• Имена модулей в require()
– Поведение по умолчанию:
– 'имя_модуля' -> npm или базовый node.js
– './путь/до/модуля.js' -> локальный
– './путь/до' -> './путь/до/index.js'
https://github.com/joyent/node/blob/master/lib/
module.js
14. 14
module.js
var npmModule = require('npmModule'),
fs = require('fs'),
someMyModule = require('../dep.js');
var myFunction = function (a, b) {
return Math.PI * a + b;
};
console.log(__filename);
exports.myFunction = myFunction;
// Или
// module.exports = myFunction;
CommonJS Modules/1.0
15. 15
main.js
var module = require('./module.js');
typeof module; // object
typeof module.myFunction; // function
var result = module.myFunction(1, 2);
console.log(result);
require('./module.js');
CommonJS Modules/1.0
18. 18
Другие глобальные переменные
• console
– вывод данных в STDOUT
– log
– dir
• process
– информация о текущем процессе
– время работы
– затраты памяти
– Информация о текущей ОС
– текущая рабочая папка CWD
– PID
• setTimeout, setInterval
http://nodejs.org/api/process.html
20. Задачи npm
• Устанавливает модули из репозитория
• Устраняет зависимости
• Удаляет не нужные модули
• Отправляет ваши модули в репозиторий
• …
https://npmjs.org/
21. 21
Зависимости main.js
• main.js
– module.js – наш модуль
• module.js
– npmModule – не наш модуль
– fs – модуль node.js
– ../dep.js – наш модуль
31. 31
http/https
• Всевозможные функции работы с http
• HTTP(S) сервер
• Скачивание файлов по сети
– аналоги $.get, $.post
http://nodejs.org/api/http.html
32. 32
main.js
var http = require('http');
http.get('http://site/', function (res) {
console.log("response: " + res.statusCode);
})
.on('error', function (e) {
console.log("Got error: " + e.message);
});
http – клиент
http://nodejs.org/api/http.html
33. 33
var http = require('http');
var server = http.createServer();
server.on('request', function (req, res) {
res.writeHead(200, {
'Content-Type': 'text/plain'
});
res.end('okay');
});
server.listen(80, '127.0.0.1');
http – сервер
http://nodejs.org/api/http.html
34. 34
Все API низкоуровневое
• Объект req – Request
– Описывает текущий запрос
– Заголовки запроса
– Тело запроса
– Тип запроса GET POST
– URL запроса
• Объект res – Response
– Описывает ответ на запрос
– Заголовки ответа
– Тело ответа
– Статус ответа
35. 35
var url = require('url');
// req.url == /?page=pagename&pewpew=ololo
function onRequest(req, res) {
var data = url.parse(req.url, true),
page = data.query.page,
userAgent = req.headers['user-agent'];
res.setHeader("Set-Cookie", "p=" + page);
res.setHeader("Content-Type","text/plain");
res.writeHead(200);
res.end(userAgent);
}
http – чуть сложнее сервер
http://nodejs.org/api/http.html