Your SlideShare is downloading. ×
Introduction in Node.js (in russian)
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Introducing the official SlideShare app

Stunning, full-screen experience for iPhone and Android

Text the download link to your phone

Standard text messaging rates apply

Introduction in Node.js (in russian)

416
views

Published on

Published in: Technology

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
416
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
5
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Михаил Давыдов Разработчик JavaScript Node.js – серверный JavaScript
  • 2. 3
  • 3. 4 История Node.js •  Разработка с 2009 – Ryan Dahl •  Поддержка Joyent •  Событийный асинхронный I/O •  V8 JavaScript от Google •  libUV - ядро Node –  событийный ввод-вывод •  Кроссплатформенный (native)
  • 4. 5 Где и почему? •  Node.js = JavaScript + Асинхронность •  Приложения реального времени –  Чаты –  Серверы игр –  Серверы Push-уведомлений •  Нагруженные прокси •  Сервисы с большим числом клиентов •  Везде, где время I/O больше вычислений
  • 5. 6 Node.js Node  V8  JS   Среда Виртуалка любой   Интерфейс
  • 6. 7 Установка •  http://nodejs.org/download/ •  Просто выполняем установочный файл
  • 7. 8 В консоли > node -v v0.8.8 # npm – Node Package Manager > npm -v 1.1.59 > node -e 'console.log("123")' 123 Запуск
  • 8. 9 main.js console.log('Hello World!'); Запуск файла с node.js > node main.js Hello World!
  • 9. Модули в Node.js CommonJS Module Глобальные переменные модуля
  • 10. Любой файл – модуль
  • 11. Глобальные переменные модуля •  module = {exports:{}, ...};! –  Объект описывающий данный модуль •  exports = {};! –  Объект экспорта данного модуля •  require(moduleName): *! •  __filename! •  __dirname! http://nodejs.org/api/modules.html http://nodejs.org/api/globals.html
  • 12. 13 require() •  Формат: .js .json .node –  Может быть любой формат (нужно прописать правило) –  Нативные модули на C++ •  Имена модулей в require() –  Поведение по умолчанию: –  'имя_модуля' -> npm или базовый node.js –  './путь/до/модуля.js' -> локальный –  './путь/до' -> './путь/до/index.js' https://github.com/joyent/node/blob/master/lib/ module.js
  • 13. 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
  • 14. 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
  • 15. 16 Запуск файла с node.js > node main.js /path/to/myOtherModule.js 5.14159
  • 16. 17 Node.js кэширует модули и выполняет их код только 1 раз
  • 17. 18 Другие глобальные переменные •  console –  вывод данных в STDOUT –  log –  dir •  process –  информация о текущем процессе –  время работы –  затраты памяти –  Информация о текущей ОС –  текущая рабочая папка CWD –  PID •  setTimeout, setInterval http://nodejs.org/api/process.html
  • 18. NPM Управление зависимостями Декларация зависимостей
  • 19. Задачи npm •  Устанавливает модули из репозитория •  Устраняет зависимости •  Удаляет не нужные модули •  Отправляет ваши модули в репозиторий •  … https://npmjs.org/
  • 20. 21 Зависимости main.js •  main.js –  module.js – наш модуль •  module.js –  npmModule – не наш модуль –  fs – модуль node.js –  ../dep.js – наш модуль
  • 21. 22 npmModule может быть не установлен – его нужно задекларировать
  • 22. 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
  • 23. 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
  • 24. 25
  • 25. Базовые модули Node fs http http://nodejs.org/api/
  • 26. 27 fs •  Всевозможные функции работы с fs •  fs.readFile •  fs.writeFile •  fs.realpath •  … http://nodejs.org/api/fs.html
  • 27. 28 Каждая функция fs имеет 2 типа: синхронный и асинхронный
  • 28. 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
  • 29. 30 Синхронный для CLI Асинхронный для сервера
  • 30. 31 http/https •  Всевозможные функции работы с http •  HTTP(S) сервер •  Скачивание файлов по сети –  аналоги $.get, $.post http://nodejs.org/api/http.html
  • 31. 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
  • 32. 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
  • 33. 34 Все API низкоуровневое •  Объект req – Request –  Описывает текущий запрос –  Заголовки запроса –  Тело запроса –  Тип запроса GET POST –  URL запроса •  Объект res – Response –  Описывает ответ на запрос –  Заголовки ответа –  Тело ответа –  Статус ответа
  • 34. 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
  • 35. 36 Как же много писать...
  • 36. Библиотеки Node.js express optimist colors … https://github.com/joyent/node/wiki/modules https://npmjs.org/
  • 37. 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
  • 38. 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
  • 39. 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
  • 40. 41
  • 41. 42 Можно и руками, но сильно дольше…
  • 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' ]
  • 43. 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
  • 44. 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!
  • 45. 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!
  • 46. 47 Можно и руками, но сильно дольше…
  • 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
  • 48. 49 Все эти библиотеки можно установить через npm: npm install express!
  • 49. node+dom Бонус: node-webkit
  • 50. 51 Цель – десктопные приложения на DOM и Node.js API https://github.com/zcbenz/nw-sample-apps https://github.com/rogerwang/node-webkit
  • 51. 52 node-webkit Node,   DOM   V8  JS   Среда Виртуалка Интерфейс GUI+*  
  • 52. 53 Аналогов много, но node- webkit это первый, кто использует Node.js
  • 53. 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
  • 54. 55 Заключение •  Node.js •  Npm •  Формат модуля –  CommonJS Module/1.0 –  exports, module, require –  кэширование модуля •  Зависимости проекта –  package.json •  Базовые модули •  Библиотеки Node.js
  • 55. 56 Михаил Давыдов Разработчик JavaScript azproduction@yandex-team.ru azproduction Спасибо