6. Посторонись, пресловутый PHP! Долой Java!
Старичок Perl, тебе так вообще давно пора на пенсию.
И как же вы уже достали, попсовые Ruby и Python!
(c) xakep
http://www.xakep.ru/post/53583/ @dmytromindra #msugodua
10. HELLO WORLD
var http = require('http');
http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('Hello Worldn');
}).listen(1337, "127.0.0.1");
console.log('Server running at http://127.0.0.1:1337/');
@dmytromindra #msugodua
11. ПОЧЕМУ NODE.JS?
Цель Node.JS - Event Driven
обеспечение
Все асинхронно
простого способа
создания Работает на Google V8
масштабируемых Официально поддерживается
сетевых программ. компанией Microsoft
Хорошо параллелится (при работе
с вводом/выводом)
@dmytromindra #msugodua
13. СЛАБЫЕ СТОРОНЫ
У Node.JS есть Плохо справляется с
слабые стороны, о тяжелыми вычислительными
которых надо задачами
помнить.
Использует только одно ядро
процессора (есть утилита
Cluster)
@dmytromindra #msugodua
14. Спагетти код
var fs = require('fs')
, path = require('path')
, file1 = "file1.txt“
, file2 = "file2.txt";
// Check if file1 exists, write to file2,
// then display new file2 contents.
path.exists(file1, function (exists) {
if (!exists) throw new Error("No file!");
fs.readFile(file1, function (err, data) {
if (err) throw err; fs.writeFile(file2, data, function (err) {
if (err) throw err; fs.readFile(file2, function (err, data) {
if (err) throw err; console.log(data.toString());
...
});
});
});
});
@dmytromindra #msugodua
20. Что в меню ?
JavaScript везде. И Express (сервер)
на сервере, и на Jade (сервер)
клиенте. Некоторые Mustache (сервер , клиент)
библиотеки Sammy.js (клиент)
используются jQuery (клиент)
одновременно и на
сервере и на
клиенте.
@dmytromindra #msugodua
21. ПРОСТОЕ WEB ПРИЛОЖЕНИЕ
Постараемся построить простое
веб приложение при помощи
Express, Jade и пары заготовок.
@dmytromindra #msugodua
22. SPA* – приложение-страница
Приложение, состоящее из одной
веб страницы и обилия скриптов.
Асинхронно общается с сервером.
Не перегружается.
*http://en.wikipedia.org/wiki/Single_Page_Application
@dmytromindra #msugodua
24. ПРИСТУПАЕМ К РАБОТЕ
Мы кратко расскажем как:
создать новое Windows Azure Node.js приложение
используя инструменты Windows PowerShell
запустить Node приложение локально, используя
Windows Azure compute emulator
опубликовать ваше приложение а Windows Azure
Дополнительная информация:
https://www.windowsazure.com/en-us/develop/nodejs/tutorials/getting-started/
https://www.windowsazure.com/en-us/develop/nodejs/tutorials/web-app-with-storage/
@dmytromindra #msugodua
25. ЕСЛИ КОРОТКО, ТО
Выполните команду
npm install azure
В файле «c:nodetasklistWebRole1Web.cloud.config» замените
тестовые данные на данные вашей учетной записи Azure.
Вы найдете много полезной информации в файле:
«C:nodetasklistWebRole1node_modulesazureREADME.md»
Создайте новую переменную в вашем JavaScript файле:
var azure = require('azure');
Все готово! Поехали !
@dmytromindra #msugodua
26. СЕРВИС ТАБЛИЦ
Создаем сервис:
var tableService = azure.createTableService();
Назначаем имя таблице:
var myTableName = “MyTable”;
Создаем таблицу:
tableService.createTableIfNotExists(myTableName, OnCreatedFu
nc);
Где OnCreatedFunc является функцией, которая выполнится после
создания таблицы (Callback)
function OnCreatedFunc(errorObject, createdBoolFlag) {…}
Больше информации по адресу:
http://www.windowsazure.com/en-us/develop/nodejs/how-to-guides/table-services/
@dmytromindra #msugodua
27. ДОБАВЛЯЕМ ЗАПИСЬ В ТАБЛИЦУ
Таблица Azure является контейнером для любого объекта. “PK” является
комбинацией Partition и Row ключей.
Объявляем объект:
var myObj = {
PartitionKey: “MyPartition“, RowKey: “myRowKey“,
myProp1: “Dima+", myProp2: “Luba=“, myProp3: “Misha”};
Добавляем объект в таблицу:
tableService.insertEntity(
myTableName, myObj, OnMyObjInserted);
Где функция OnMyObjInserted является callback-ом
function OnMyObjInserted(error, serverEntity) {…}
@dmytromindra #msugodua
28. ОБНОВЛЯЕМ ЗАПИСЬ
Объявляем объект с обновленными данными:
var myObjUpd = { PartitionKey:
“MyPartition“, RowKey: “myRowKey", myProp1:
“Dima+", myProp2: “Luba=”, myProp3: “Misha and
Margo" };
Обновляем существующую сущность:
tableService.updateEntity(
myTableName, myObjUpd, OnMyObjUpdated);
Функция OnMyObjUpdated – это, как всегда, callback:
function OnMyObjUpdated(error, serverEntity) {…}
Подводный камень: вы должны заполнить все поля своего
объекта, либо воспользоваться объектом ServerEntity и изменить
только необходимые поля!
@dmytromindra #msugodua
29. ЗАПРАШИВАЕМ ЗАПИСЬ
Одиночный объект:
tableService.queryEntity(myTableName, myPartition, myRowK
ey, OnEntityQueried);
callback:
function OnEntityQueried(error, serverEntity) {…}
Набор объектов:
var query = azure.TableQuery.select().from(myTableName)
.where(“PartitionKey eq ?”, “MyPartition”);
tableService.queryEntities(query, OnEntitiesQueried);
сallback:
function OnEntitiesQueried(error, serverEntities) {…}
@dmytromindra #msugodua
30. КАК НАСЧЕТ BLOB?
Все работает точно так же, как и в таблицах:
var azure = require('azure');
var blobService = azure.createBlobService();
blobService.createContainerIfNotExists(…);
blobService.createBlockBlobFromStream(…);
blobService.listBlobs(…);
blobService.getBlobToStream(…);
blobService.deleteBlob(…);
Подробнее
http://www.windowsazure.com/en-us/develop/nodejs/how-to-guides/blob-storage/
@dmytromindra #msugodua
31. WEB в реальном времени
SOCKET.IO
@dmytromindra #msugodua
32. WebSockets
Постоянное подключение к
серверу.
Часть стандарта HTML5
Предназначен для
построения Real-Time
приложений.
http://tools.ietf.org/html/rfc6455 @dmytromindra #msugodua
33. Что такое SOCKET.IO?
Больше, чем просто Виды транспорта:
WebSockets. WebSocket
Имеет Flash Socket
альтернативные виды
транспорта.
AJAX long-polling
AJAX multipart streaming
Поставляется с
клиентской IFrame
библиотектой. JSONP polling
@dmytromindra #msugodua
34. Время действовать
Напишем В нашем случае этим
приложение, работа приложением будет обмен
ющее в реальном мгновенными сообщениями.
времени.
@dmytromindra #msugodua
36. Мои аргументы:
1. JavaScript невероятно популярен. На рынке много
программистов.
2. JavaScript будет единым языком и на сервере и
на клиенте. Никакого дублирования кода.
3. Асинхронная событийная модель.
@dmytromindra #msugodua
37. Внеклассное чтение
Как убедить босса?
http://nodeguide.com/convincing_the_boss.html
Выбор правильного стиля
http://stackoverflow.com/questions/5495984/coding-style-guide-for-node-js-apps
Что такое Node?
http://stackoverflow.com/questions/1884724/what-is-node-js
@dmytromindra #msugodua