SlideShare a Scribd company logo
1 of 56
Download to read offline
Михаил Давыдов
Разработчик JavaScript
Node.js –
серверный
JavaScript
3
4
История Node.js
•  Разработка с 2009 – Ryan Dahl
•  Поддержка Joyent
•  Событийный асинхронный I/O
•  V8 JavaScript от Google
•  libUV - ядро Node
–  событийный ввод-вывод
•  Кроссплатформенный (native)
5
Где и почему?
•  Node.js = JavaScript + Асинхронность
•  Приложения реального времени
–  Чаты
–  Серверы игр
–  Серверы Push-уведомлений
•  Нагруженные прокси
•  Сервисы с большим числом клиентов
•  Везде, где время I/O больше вычислений
6
Node.js
Node	
  V8	
  JS	
  
Среда	

Виртуалка	

любой	
  
Интерфейс
7
Установка
•  http://nodejs.org/download/
•  Просто выполняем установочный файл
8
В консоли
> node -v
v0.8.8
# npm – Node Package Manager
> npm -v
1.1.59
> node -e 'console.log("123")'
123
Запуск
9
main.js
console.log('Hello World!');
Запуск файла с node.js
> node main.js
Hello World!
Модули в Node.js
CommonJS Module
Глобальные переменные модуля
Любой файл – модуль
Глобальные переменные модуля
•  module = {exports:{}, ...};!
–  Объект описывающий данный модуль
•  exports = {};!
–  Объект экспорта данного модуля
•  require(moduleName): *!
•  __filename!
•  __dirname!
http://nodejs.org/api/modules.html
http://nodejs.org/api/globals.html
13
require()
•  Формат: .js .json .node
–  Может быть любой формат (нужно прописать правило)
–  Нативные модули на C++
•  Имена модулей в require()
–  Поведение по умолчанию:
–  'имя_модуля' -> npm или базовый node.js
–  './путь/до/модуля.js' -> локальный
–  './путь/до' -> './путь/до/index.js'
https://github.com/joyent/node/blob/master/lib/
module.js
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
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
16
Запуск файла с node.js
> node main.js
/path/to/myOtherModule.js
5.14159
17
Node.js кэширует модули и
выполняет их код
только 1 раз
18
Другие глобальные переменные
•  console
–  вывод данных в STDOUT
–  log
–  dir
•  process
–  информация о текущем процессе
–  время работы
–  затраты памяти
–  Информация о текущей ОС
–  текущая рабочая папка CWD
–  PID
•  setTimeout, setInterval
http://nodejs.org/api/process.html
NPM
Управление зависимостями
Декларация зависимостей
Задачи npm
•  Устанавливает модули из репозитория
•  Устраняет зависимости
•  Удаляет не нужные модули
•  Отправляет ваши модули в репозиторий
•  …
https://npmjs.org/
21
Зависимости main.js
•  main.js
–  module.js – наш модуль
•  module.js
–  npmModule – не наш модуль
–  fs – модуль node.js
–  ../dep.js – наш модуль
22
npmModule может быть не
установлен – его нужно
задекларировать
23
{
"dependencies": {
"npmModule": "*",
"npmModule": ">=1.0.2",
"npmModule": "http://asdf.com/asdf.tar.gz"
},
"name": "your-app",
"version": "1.0.0",
"description": "Hello World!",
"author": {
"name": "Barney Rubble",
"email": "b@rubble.com"
}
}
package.json
https://npmjs.org/doc/json.html
24
npm install
> wget http://site.ru/your-app.zip
> unzip your-app.zip
> cd your-app
> npm install
your-app
+-npmModule
> node mian.js
25
Базовые модули Node
fs
http
http://nodejs.org/api/
27
fs
•  Всевозможные функции работы с fs
•  fs.readFile
•  fs.writeFile
•  fs.realpath
•  …
http://nodejs.org/api/fs.html
28
Каждая функция fs имеет 2
типа: синхронный и
асинхронный
29
main.js
var fs = require('fs');
fs.readFile('./package.json', 'utf8', file);
function file(err, json) {
if (err) throw err;
console.log(json);
}
var json = fs.readFileSync('./package.json',
'utf8');
fs
http://nodejs.org/api/fs.html
30
Синхронный для CLI
Асинхронный для сервера
31
http/https
•  Всевозможные функции работы с http
•  HTTP(S) сервер
•  Скачивание файлов по сети
–  аналоги $.get, $.post
http://nodejs.org/api/http.html
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
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
Все API низкоуровневое
•  Объект req – Request
–  Описывает текущий запрос
–  Заголовки запроса
–  Тело запроса
–  Тип запроса GET POST
–  URL запроса
•  Объект res – Response
–  Описывает ответ на запрос
–  Заголовки ответа
–  Тело ответа
–  Статус ответа
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
36
Как же много писать...
Библиотеки Node.js
express
optimist
colors
…
https://github.com/joyent/node/wiki/modules
https://npmjs.org/
38
// В 5 строк
require('express')()
.get('/', function (req, res) {
res.send('hello world');
})
.listen();
express – http фреймворк
http://expressjs.com/api.html
http://expressjs.com/guide.html
39
var express = require('express');
var app = express();
var staticDir = __dirname + '/public';
app.get('/', function (req, res){
res.send('hello world');
});
app.use(express.static(staticDir));
app.use(express.logger());
app.listen(3000);
express – http фреймворк
http://expressjs.com/api.html
http://expressjs.com/guide.html
40
var optimist = require('optimist')
.default('port', 80)
.default('host', '0.0.0.0');
var cfg = optimist.argv;
require('http').createServer();
server.listen(cfg.port, cfg.host);
optimist – CLI парсер
https://github.com/substack/node-optimist
> node main.js --port 81 --host pewpew.com
> node main.js
41
42
Можно и руками, но сильно
дольше…
43
console.log(process.argv);
CLI парсер руками
> node main.js --port 81 --host pewpew.com
> node main.js
[
'/path/to/node',
'main.js',
'--port',
'80',
'--host',
'pewpew.com'
]
44
CLI парсер руками
> node main.js --port 81 --host pewpew.com
// argv парсер в 97 байт
var argv = (function(a,b,c,d){c={};for
(a=a.split(/s*B[/-]+([w-]+)[s=]
*/),d=1;b=a[d++];c[b]=a[d++]||!0);return c})
(process.argv.join(' '));
console.log(argv);
// {port: "81", host: "pewpew.com"}
https://gist.github.com/1497865
45
require('colors');
console.log('hello'.green);
console.log('i like cake'.underline.red)
console.log('OMG Rainbows!'.rainbow);
colors – подсветка консоли
https://github.com/Marak/colors.js
> node main.js
hello
I like cake
OMG Rainbows!
46
require('colors');
console.log('hello'.green);
console.log('i like cake'.underline.red)
console.log('OMG Rainbows!'.rainbow);
colors – подсветка консоли
https://github.com/Marak/colors.js
> node main.js
hello
I like cake
OMG Rainbows!
47
Можно и руками, но сильно
дольше…
48
var red = 'u001b[31m',
blue = 'u001b[34m',
reset = 'u001b[0m';
console.log(
red + 'hello' + reset + ' ' +
blue + 'world' + reset);
Цветастая консоль руками
> node main.js
hello world
49
Все эти библиотеки можно
установить через npm:
npm install express!
node+dom
Бонус: node-webkit
51
Цель – десктопные
приложения на DOM и
Node.js API
https://github.com/zcbenz/nw-sample-apps
https://github.com/rogerwang/node-webkit
52
node-webkit
Node,	
  
DOM	
  
V8	
  JS	
  
Среда	

Виртуалка	

Интерфейс	

GUI+*	
  
53
Аналогов много, но node-
webkit это первый, кто
использует Node.js
54
Список файлов в текущей директории
<ol class="b-files-list"></ol>
<script src="http://yandex.st/jquery/1.8.2/jquery.min.js">
</script>
<script>
var fs = require('fs');
fs.readDirSync('.')
.forEach(function (file) {
$('<li/>')
.text(file)
.appendTo('.b-files-list');
});
</script>
node-webkit
55
Заключение
•  Node.js
•  Npm
•  Формат модуля
–  CommonJS Module/1.0
–  exports, module, require
–  кэширование модуля
•  Зависимости проекта
–  package.json
•  Базовые модули
•  Библиотеки Node.js
56
Михаил Давыдов
Разработчик JavaScript
azproduction@yandex-team.ru
azproduction
Спасибо

More Related Content

What's hot

Иван Карев — Клиентская оптимизация
Иван Карев — Клиентская оптимизацияИван Карев — Клиентская оптимизация
Иван Карев — Клиентская оптимизация
Yandex
 
2013 09 19 кеширование на клиенте и сервере
2013 09 19 кеширование на клиенте и сервере2013 09 19 кеширование на клиенте и сервере
2013 09 19 кеширование на клиенте и сервере
Yandex
 
Выжимаем из сервера максимум (Андрей Паньгин)
Выжимаем из сервера максимум (Андрей Паньгин)Выжимаем из сервера максимум (Андрей Паньгин)
Выжимаем из сервера максимум (Андрей Паньгин)
Ontico
 
Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)
Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)
Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)
Ontico
 
Евгений Потапов (Сумма Айти)
Евгений Потапов (Сумма Айти)Евгений Потапов (Сумма Айти)
Евгений Потапов (Сумма Айти)
Ontico
 
Smirnov twisted-python
Smirnov twisted-pythonSmirnov twisted-python
Smirnov twisted-python
Andrey Smirnov
 
Чему мы научились разрабатывая микросервисы?
Чему мы научились разрабатывая микросервисы?Чему мы научились разрабатывая микросервисы?
Чему мы научились разрабатывая микросервисы?
Vadim Madison
 

What's hot (20)

DevOps или исскуство ухода за Интернет-проектом
DevOps или исскуство ухода за Интернет-проектомDevOps или исскуство ухода за Интернет-проектом
DevOps или исскуство ухода за Интернет-проектом
 
Иван Карев — Клиентская оптимизация
Иван Карев — Клиентская оптимизацияИван Карев — Клиентская оптимизация
Иван Карев — Клиентская оптимизация
 
2013 09 19 кеширование на клиенте и сервере
2013 09 19 кеширование на клиенте и сервере2013 09 19 кеширование на клиенте и сервере
2013 09 19 кеширование на клиенте и сервере
 
Выжимаем из сервера максимум (Андрей Паньгин)
Выжимаем из сервера максимум (Андрей Паньгин)Выжимаем из сервера максимум (Андрей Паньгин)
Выжимаем из сервера максимум (Андрей Паньгин)
 
Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)
Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)
Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)
 
How to build solid CI-CD pipeline / Илья Беда (beda.software)
How to build solid CI-CD pipeline / Илья Беда (beda.software)How to build solid CI-CD pipeline / Илья Беда (beda.software)
How to build solid CI-CD pipeline / Илья Беда (beda.software)
 
Оптимизация работы с данными в мобильных приложениях / Святослав Иванов, Артё...
Оптимизация работы с данными в мобильных приложениях / Святослав Иванов, Артё...Оптимизация работы с данными в мобильных приложениях / Святослав Иванов, Артё...
Оптимизация работы с данными в мобильных приложениях / Святослав Иванов, Артё...
 
Незаурядная Java как инструмент разработки высоконагруженного сервера
Незаурядная Java как инструмент разработки высоконагруженного сервераНезаурядная Java как инструмент разработки высоконагруженного сервера
Незаурядная Java как инструмент разработки высоконагруженного сервера
 
Евгений Потапов (Сумма Айти)
Евгений Потапов (Сумма Айти)Евгений Потапов (Сумма Айти)
Евгений Потапов (Сумма Айти)
 
Иван Карев — Клиентская оптимизация
Иван Карев — Клиентская оптимизацияИван Карев — Клиентская оптимизация
Иван Карев — Клиентская оптимизация
 
Windows Azure and node js
Windows Azure and node jsWindows Azure and node js
Windows Azure and node js
 
Что нового в nginx? / Максим Дунин (Nginx, Inc.)
Что нового в nginx? / Максим Дунин (Nginx, Inc.)Что нового в nginx? / Максим Дунин (Nginx, Inc.)
Что нового в nginx? / Максим Дунин (Nginx, Inc.)
 
Chef @DevWeb
Chef @DevWebChef @DevWeb
Chef @DevWeb
 
Smirnov twisted-python
Smirnov twisted-pythonSmirnov twisted-python
Smirnov twisted-python
 
HTML 5: будущее уже сегодня, Сергей Байдачный, Microsoft Ukraine
HTML 5: будущее уже сегодня, Сергей Байдачный, Microsoft UkraineHTML 5: будущее уже сегодня, Сергей Байдачный, Microsoft Ukraine
HTML 5: будущее уже сегодня, Сергей Байдачный, Microsoft Ukraine
 
Чему мы научились разрабатывая микросервисы?
Чему мы научились разрабатывая микросервисы?Чему мы научились разрабатывая микросервисы?
Чему мы научились разрабатывая микросервисы?
 
Производительность WebGL-приложений / Дмитренко Кирилл (Яндекс)
Производительность WebGL-приложений / Дмитренко Кирилл (Яндекс)Производительность WebGL-приложений / Дмитренко Кирилл (Яндекс)
Производительность WebGL-приложений / Дмитренко Кирилл (Яндекс)
 
Basis.js – «под капотом»
Basis.js – «под капотом»Basis.js – «под капотом»
Basis.js – «под капотом»
 
Дмитрий Стогов
Дмитрий СтоговДмитрий Стогов
Дмитрий Стогов
 
Распределенные системы в Одноклассниках
Распределенные системы в ОдноклассникахРаспределенные системы в Одноклассниках
Распределенные системы в Одноклассниках
 

Viewers also liked

Viewers also liked (12)

JavaScript. Event Loop and Timers (in russian)
JavaScript. Event Loop and Timers (in russian)JavaScript. Event Loop and Timers (in russian)
JavaScript. Event Loop and Timers (in russian)
 
JavaScript. Basics (in russian)
JavaScript. Basics (in russian)JavaScript. Basics (in russian)
JavaScript. Basics (in russian)
 
Ajax and Transports (in russian)
Ajax and Transports (in russian)Ajax and Transports (in russian)
Ajax and Transports (in russian)
 
Dart - светлая сторона силы?
Dart - светлая сторона силы?Dart - светлая сторона силы?
Dart - светлая сторона силы?
 
JavaScript. OOP (in russian)
JavaScript. OOP (in russian)JavaScript. OOP (in russian)
JavaScript. OOP (in russian)
 
Dump-IT Загрузка и инициализация JavaScript
Dump-IT Загрузка и инициализация JavaScriptDump-IT Загрузка и инициализация JavaScript
Dump-IT Загрузка и инициализация JavaScript
 
JavaScript. Loops and functions (in russian)
JavaScript. Loops and functions (in russian)JavaScript. Loops and functions (in russian)
JavaScript. Loops and functions (in russian)
 
Components now! (in russian)
Components now! (in russian)Components now! (in russian)
Components now! (in russian)
 
JavaScript. Event Model (in russian)
JavaScript. Event Model (in russian)JavaScript. Event Model (in russian)
JavaScript. Event Model (in russian)
 
JavaScript. Async (in Russian)
JavaScript. Async (in Russian)JavaScript. Async (in Russian)
JavaScript. Async (in Russian)
 
Components now!
Components now! Components now!
Components now!
 
Node Foundation Membership Overview 20160907
Node Foundation Membership Overview 20160907Node Foundation Membership Overview 20160907
Node Foundation Membership Overview 20160907
 

Similar to Introduction in Node.js (in russian)

CodeFest 2010. Столяров С. — Серверный JavaScript: NodeJS и CouchDB
CodeFest 2010. Столяров С. — Серверный JavaScript: NodeJS и CouchDBCodeFest 2010. Столяров С. — Серверный JavaScript: NodeJS и CouchDB
CodeFest 2010. Столяров С. — Серверный JavaScript: NodeJS и CouchDB
CodeFest
 
Серверный JavaScript: NodeJS и CouchDB
Серверный JavaScript: NodeJS и CouchDBСерверный JavaScript: NodeJS и CouchDB
Серверный JavaScript: NodeJS и CouchDB
Stepan Stolyarov
 
Как превратить приложение в платформу
Как превратить приложение в платформуКак превратить приложение в платформу
Как превратить приложение в платформу
Vadim Kruchkov
 
Истинный DevOps. Секрет 42.
Истинный DevOps. Секрет 42.Истинный DevOps. Секрет 42.
Истинный DevOps. Секрет 42.
Nikita Borzykh
 
«DevOps — это о передаче смысла» — Александр Титов, Express 42
«DevOps — это о передаче смысла» — Александр Титов, Express 42«DevOps — это о передаче смысла» — Александр Титов, Express 42
«DevOps — это о передаче смысла» — Александр Титов, Express 42
DevDay
 
Building deployment pipeline - DevOps way
Building deployment pipeline - DevOps wayBuilding deployment pipeline - DevOps way
Building deployment pipeline - DevOps way
Andrey Rebrov
 
Стажировка-2014, занятие 8. Обзор Sails framework (Node.js)
Стажировка-2014, занятие 8. Обзор Sails framework (Node.js)Стажировка-2014, занятие 8. Обзор Sails framework (Node.js)
Стажировка-2014, занятие 8. Обзор Sails framework (Node.js)
7bits
 
Windows Azure & NodeJS Microsoft SWIT 2012
Windows Azure & NodeJS Microsoft SWIT 2012 Windows Azure & NodeJS Microsoft SWIT 2012
Windows Azure & NodeJS Microsoft SWIT 2012
Dmytro Mindra
 

Similar to Introduction in Node.js (in russian) (20)

CodeFest 2010. Столяров С. — Серверный JavaScript: NodeJS и CouchDB
CodeFest 2010. Столяров С. — Серверный JavaScript: NodeJS и CouchDBCodeFest 2010. Столяров С. — Серверный JavaScript: NodeJS и CouchDB
CodeFest 2010. Столяров С. — Серверный JavaScript: NodeJS и CouchDB
 
Серверный JavaScript: NodeJS и CouchDB
Серверный JavaScript: NodeJS и CouchDBСерверный JavaScript: NodeJS и CouchDB
Серверный JavaScript: NodeJS и CouchDB
 
Владимир Алаев "Разработка на Node.js: инструменты, библиотеки, сервисы"
Владимир Алаев "Разработка на Node.js: инструменты, библиотеки, сервисы"Владимир Алаев "Разработка на Node.js: инструменты, библиотеки, сервисы"
Владимир Алаев "Разработка на Node.js: инструменты, библиотеки, сервисы"
 
"nw.js: введение в кросс-платформенные декстопные приложения на JavaScript", ...
"nw.js: введение в кросс-платформенные декстопные приложения на JavaScript", ..."nw.js: введение в кросс-платформенные декстопные приложения на JavaScript", ...
"nw.js: введение в кросс-платформенные декстопные приложения на JavaScript", ...
 
Доклад "nw.js: введение в кросс-платформенные декстопные приложения на JS" на...
Доклад "nw.js: введение в кросс-платформенные декстопные приложения на JS" на...Доклад "nw.js: введение в кросс-платформенные декстопные приложения на JS" на...
Доклад "nw.js: введение в кросс-платформенные декстопные приложения на JS" на...
 
nw.js введение в кросс-платформенные десктопные приложения на javascript (mo...
nw.js  введение в кросс-платформенные десктопные приложения на javascript (mo...nw.js  введение в кросс-платформенные десктопные приложения на javascript (mo...
nw.js введение в кросс-платформенные десктопные приложения на javascript (mo...
 
Node.JS: возможности для РНР-разработчика
Node.JS: возможности для РНР-разработчикаNode.JS: возможности для РНР-разработчика
Node.JS: возможности для РНР-разработчика
 
"Webpack: 7 бед — один ответ" — Денис Измайлов, MoscowJS 17
"Webpack: 7 бед — один ответ" — Денис Измайлов, MoscowJS 17"Webpack: 7 бед — один ответ" — Денис Измайлов, MoscowJS 17
"Webpack: 7 бед — один ответ" — Денис Измайлов, MoscowJS 17
 
Леонид Васильев "Python в инфраструктуре поиска"
Леонид Васильев "Python в инфраструктуре поиска"Леонид Васильев "Python в инфраструктуре поиска"
Леонид Васильев "Python в инфраструктуре поиска"
 
webpack: 7 бед - один ответ
webpack: 7 бед - один ответwebpack: 7 бед - один ответ
webpack: 7 бед - один ответ
 
Как превратить приложение в платформу
Как превратить приложение в платформуКак превратить приложение в платформу
Как превратить приложение в платформу
 
NPM и модульная архитектура приложения
NPM и модульная архитектура приложенияNPM и модульная архитектура приложения
NPM и модульная архитектура приложения
 
JavaScript-модули "из прошлого в будущее"
JavaScript-модули "из прошлого в будущее"JavaScript-модули "из прошлого в будущее"
JavaScript-модули "из прошлого в будущее"
 
Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...
Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...
Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...
 
Истинный DevOps. Секрет 42.
Истинный DevOps. Секрет 42.Истинный DevOps. Секрет 42.
Истинный DevOps. Секрет 42.
 
«DevOps — это о передаче смысла» — Александр Титов, Express 42
«DevOps — это о передаче смысла» — Александр Титов, Express 42«DevOps — это о передаче смысла» — Александр Титов, Express 42
«DevOps — это о передаче смысла» — Александр Титов, Express 42
 
Building deployment pipeline - DevOps way
Building deployment pipeline - DevOps wayBuilding deployment pipeline - DevOps way
Building deployment pipeline - DevOps way
 
Стажировка-2014, занятие 8. Обзор Sails framework (Node.js)
Стажировка-2014, занятие 8. Обзор Sails framework (Node.js)Стажировка-2014, занятие 8. Обзор Sails framework (Node.js)
Стажировка-2014, занятие 8. Обзор Sails framework (Node.js)
 
What do you MEAN? или введение в Fullstack JavaScript
What do you MEAN? или введение в Fullstack JavaScriptWhat do you MEAN? или введение в Fullstack JavaScript
What do you MEAN? или введение в Fullstack JavaScript
 
Windows Azure & NodeJS Microsoft SWIT 2012
Windows Azure & NodeJS Microsoft SWIT 2012 Windows Azure & NodeJS Microsoft SWIT 2012
Windows Azure & NodeJS Microsoft SWIT 2012
 

Introduction in Node.js (in russian)