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

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Introduction in Node.js (in russian)

577

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
577
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
9
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 Спасибо

×