SlideShare ist ein Scribd-Unternehmen logo
1 von 51
Downloaden Sie, um offline zu lesen
Темы лекции: Обзор веб-фреймворков.
Тренер: Игорь Шкулипа, к.т.н.
JavaScript. Базовый курс
Занятие 11
http://www.slideshare.net/IgorShkulipa 2
jQuery
jQuery – это JavaScript-библиотека, фокусирующаяся на взаимодействии
JavaScript, HTML и CSS.
Что умеет jQuery:
• Обращаться к любому элементу DOM (объектной модели
документа) и не только обращаться, но и манипулировать ими.
• Работать с событиями.
• Легко осуществлять различные визуальные эффекты.
• Работать с AJAX.
• Имеет огромное количество JavaScript плагинов, предназначенных
для создания элементов пользовательских интерфейсов.
http://www.slideshare.net/IgorShkulipa 3
Функция $()
$("div") вернет все div-элементы на странице.
$(".someBlock") вернет все элементы с классом
someBlock.
$("#content") вернет элемент с идентификатором
content.
$("#content2 div.someBlock")
вернет div-элементы с классом
someBlock, которые находятся внутри
элемента с идентификатором
content2.
$("div:odd") вернет div-элементы, находящиеся на
странице под нечетными номерами.
$("[value = 5]") вернет все элементы с атрибутом
value, равным 5.
С помощью функции $() из библиотеки, можно находить элементы на
странице по различным параметрам
http://www.slideshare.net/IgorShkulipa 4
Функция $()
$("#bigIt").css("height") возвратит значение высоты у
элемента с идентификатором bigIt.
$("div").css("width", "20px") установит новое значение ширины
всем div-элемента на странице.
$("#bigIt").attr("class") возвратит значение класса элемента с
id = bigIt.
$("#bigIt").attr("class", "box") установит новое значение атрибута
class у элемента с id = bigIt.
$("#bigIt").html(<p>Новый!</p>)
изменит все html-содержимое
элемента с id = bigIt, на заданное в
методе html.
$("#bigIt").text() возвратит текст, находящийся внутри
элемента с id = bigIt.
$(".someBox").empty() очистить от содержимого элементы с
классом someBox.
http://www.slideshare.net/IgorShkulipa 5
Цепочки методов
Важной особенностью большинства методов jQuery, является возможность
связывать их в цепочки. Методы, манипулирующие элементами
документа, обычно возвращают эти объекты для дальнейшего
использования, что позволяет писать примерно следующее:
$("#bigIt").empty().attr("class", "noContent");
// в результате, у элемента с идентификатором bigIt будет удалено
все содержимое,
// после чего ему будет установлен класс noContent.
http://www.slideshare.net/IgorShkulipa 6
Работа с набором элементов
Помимо манипуляций с выбранными элементами, jQuery позволяет
работать с самим набором: изменять его, а так же работать с
элементами по отдельности.
$("div").parent() вернет родительские элементы всех div-ов.
$("div").children() вернет дочерние элементы всех div-ов.
$("#someId").next() вернет элемент, лежащий сразу после someId.
$("div").prev() вернет элементы, лежащие перед div'ами.
$("div").eq(i) вернет div-элемент, с индексом i в наборе.
$("div").get(i) вернет DOM-объект div'а, с индексом i.
$("div").get() вернет массив DOM-объеков всех div-ов.
$("div").size() вернет размер набора (количествово div-ов).
http://www.slideshare.net/IgorShkulipa 7
Анимационные эффекты
Ключевым методом, на которой базируются все остальные, является метод
animate(), с помощью которого можно задавать плавное изменение
различных CSS-свойств:
.animate(properties, [duration], [easing], [callback])
• properties — список CSS-свойств, участвующих в анимации и их
конечных значений. Задаются объектом, в формате
{ключ:значение}, например:{opacity: 50, width: 100, height: 200}.
• duration — продолжительность выполнения анимации. Может быть
задана в миллисекундах или строковым значением 'fast' или 'slow'
(200 и 600 миллисекунд).
• easing — изменение скорости анимации (будет ли она замедляется
к концу выполнения или наоборот ускорится). Задается строковым
значением: "linear" и "swing" (для равномерной анимации и
анимации с ускорением). Другие варианты можно найти в плагинах.
• callback — функция, которая будет вызвана после завершения
анимации.
$("#mydiv")
.animate({height: "hide"}, 300)
.text("Новый текст")
.animate({height: "show"}, 300);
http://www.slideshare.net/IgorShkulipa 8
Ajax
В jQuery реализована возможность выполнения запросов к серверу без
перезагрузки страницы (ajax). Базовыми функциями для ее работы
являются post() и get():
$.post(url, [params], [callback], [dataType])
$.get(url, [params], [callback], [dataType])
• url — url-адрес, по которому будет отправлен запрос.
• data — данные, которые будут отправлены на сервер. Они
должны быть представлены объектом, в формате: {fName1:value1,
fName2:value2, ...}.
• callback — пользовательская функция, которая будет вызвана
после ответа сервера.
• dataType — ожидаемый тип данных, которые пришлет сервер в
ответ на запрос.
Простейший пример:
$.get(“http://random.org");
http://www.slideshare.net/IgorShkulipa 9
Другие возможности
Существуют и другие возможности jQuery, например:
• $.browser поможет узнать тип браузера.
• $.support поможет узнать конкретные особенности браузера.
• .offset() и .position() позволят узнать или изменить позицию
выбранного элемента.
• .width() и .height() позволят узнать или изменить размеры
выбранного элемента.
• .scrollTop() и .scrollLeft() позволят работать с прокруткой.
Ссылка на русскоязычное описание библиотеки
И на сайт разработчиков
http://www.slideshare.net/IgorShkulipa 10
Пример «Крестики-нолики с jQuery»
<!doctype html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title>jQuery XO</title>
<script type="text/javascript" src="jquery-1.2.6.js"></script>
<script src="xo.js" language="javascript"></script>
<link rel="stylesheet" type="text/css" href="xo.css" />
</head>
<body>
<table style="width:600px; height:600px;">
<tr><td id="11"></td>
<td id="12"></td>
<td id="13"></td></tr>
<tr><td id="21"></td>
<td id="22"></td>
<td id="23"></td></tr>
<tr><td id="31"></td>
<td id="32"></td>
<td id="33"></td></tr>
</table>
</body>
</html>
xo.html
td, tr {
border: 1px solid black;
text-align: center;
color:transparent;
width: 33.33%;
height: 33.33%;
}
xo.css
http://www.slideshare.net/IgorShkulipa 11
xo.js функция проверки победы
function CheckVictory(xo) {
if (
//Строки
(($("#11").text() == xo) && ($("#12").text() == xo) &&
($("#13").text() == xo)) ||
(($("#21").text() == xo) && ($("#22").text() == xo) &&
($("#23").text() == xo)) ||
(($("#31").text() == xo) && ($("#32").text() == xo) &&
($("#33").text() == xo)) ||
//Столбцы
(($("#11").text() == xo) && ($("#21").text() == xo) &&
($("#31").text() == xo)) ||
(($("#12").text() == xo) && ($("#22").text() == xo) &&
($("#32").text() == xo)) ||
(($("#13").text() == xo) && ($("#23").text() == xo) &&
($("#33").text() == xo)) ||
//Диагонали
(($("#11").text() == xo) && ($("#22").text() == xo) &&
($("#33").text() == xo)) ||
(($("#31").text() == xo) && ($("#22").text() == xo) &&
($("#13").text() == xo))) {
if (xo == 'X')
alert('Крестики победили!');
else
alert('Нолики победили!');
}
}
http://www.slideshare.net/IgorShkulipa 12
xo.js функция, отмечающая ход
function MarkXO(elem, xo) {
elem.text(xo);
elem.css("background-repeat", "no-repeat");
elem.css("background-position", "center");
if (xo == 'X')
elem.css("background-image", "url('x.png')");
else
elem.css("background-image", "url('o.png')");
}
http://www.slideshare.net/IgorShkulipa 13
xo.js функция-обработчик клика ячейки
var xoGlobal = 'O';
function ClickLogic() {
text = $(this).text();
if (text == '') {
if (xoGlobal == 'X') {
xoGlobal = 'O'
} else {
xoGlobal = 'X'
};
MarkXO($(this), xoGlobal);
CheckVictory(xoGlobal);
} else {
alert("Занято!");
}
}
http://www.slideshare.net/IgorShkulipa 14
xo.js последняя «функция»
$(document).ready(
function () {
$('td').click(ClickLogic);
});
Эта запись «переводится», приблизительно, как «в качестве
обработчика $(document).ready установить функцию, которая
обработчиком клика td-шки устанавливает функцию
ClickLogic»
http://www.slideshare.net/IgorShkulipa 15
Результат
http://www.slideshare.net/IgorShkulipa 16
Результат
http://www.slideshare.net/IgorShkulipa 17
Результат
http://www.slideshare.net/IgorShkulipa 18
Bootstrap
http://bootstrap-ru.com/
Twitter Bootstrap - это фреймворк для создания современных, кросс-браузерных и
стандартизованных интерфейсов. Продуманная структура кода HTML, JavaScript
и CSS дает вам возможность создавать множество самых разнообразных
элементов интерфейса и сетку сайта.
Основные инструменты Bootstrap:
• Сетки — заранее заданные размеры колонок, которые можно сразу же
использовать, например ширина колонки 90px относится к классу .span2, который
мы можем использовать в CSS описании документа;
• Шаблоны — фиксированный или резиновый шаблон документа;
• Типографика — описания шрифтов, определение некоторых классов для
шрифтов таких как код, цитаты и т.п.;
• Медиа — представляет возможности управления изображениями и видео;
• Таблицы — средства оформления таблиц, вплоть до добавления
функциональности для обеспечения возможности сортировки;
• Формы — классы для оформления не только форм, но и некоторых событий
происходящих с ними;
• Навигация — классы оформления для вкладок, страниц, меню и панелей
инструментов;
• Алерты — оформление диалоговых окон, подсказок и всплывающих окон.
http://www.slideshare.net/IgorShkulipa 19
Компоненты Bootstrap
Все компоненты Bootstrap
http://www.slideshare.net/IgorShkulipa 20
Пример
<!DOCTYPE html>
<html>
<head>
<title>Bootstrap Example</title>
<link href="css/bootstrap.css" rel="stylesheet" media="screen">
</head>
<body>
<h1>Hello, World from Bootstrap</h1>
<script src="http://code.jquery.com/jquery-latest.js"></script>
<script src="js/bootstrap.min.js"></script>
<div class="tabbable">
<ul class="nav nav-tabs">
<li class="active"><a href="#tab1" data-toggle="tab">Tab 1</a></li>
<li><a href="#tab2" data-toggle="tab">Tab 2</a></li>
</ul>
<div class="tab-content">
<div class="tab-pane active" id="tab1">
<p>Hello from Tab 1</p>
</div>
<div class="tab-pane" id="tab2">
<p>Hello from Tab 2</p>
</div>
</div>
</div>
</body>
</html>
http://www.slideshare.net/IgorShkulipa 21
Результат
http://www.slideshare.net/IgorShkulipa 22
AngularJS
AngularJS — JavaScript-фреймворк с открытым исходным кодом.
Предназначен для разработки одностраничных приложений. Его цель
— расширение браузерных приложений на основе MVC шаблона, а
также упрощение тестирования и разработки.
Фреймворк работает с HTML, содержащим дополнительные
пользовательские атрибуты, которые описываются директивами, и
связывает ввод или вывод области страницы с моделью,
представляющей собой обычные переменные JavaScript. Значения
этих переменных задаются вручную или извлекаются из статических
или динамических JSON-данных.
AngularJS спроектирован с убеждением, что декларативное
программирование лучше всего подходит для построения
пользовательских интерфейсов и описания программных
компонентов, в то время как императивное программирование
отлично подходит для описания бизнес-логики. Фреймворк
адаптирует и расширяет традиционный HTML, чтобы обеспечить
двустороннюю привязку данных для динамического контента, что
позволяет автоматически синхронизировать модель и представление.
В результате AngularJS уменьшает роль DOM-манипуляций и улучшает
тестируемость.
http://www.slideshare.net/IgorShkulipa 23
Популярные Angular-директивы
С помощью директив AngularJS можно создавать пользовательские HTML-
теги и атрибуты, чтобы добавить поведение некоторым элементам.
• ng-app - объявляет элемент корневым для приложения.
• ng-bind - автоматически заменяет текст HTML-элемента на значение
переданного выражения.
• ng-model - то же что и ng-bind, только обеспечивает двустороннее
связывание данных. Изменится содержимое элемента, ангуляр изменит
и значение модели. Изменится значение модели, ангуляр изменит
текст внутри элемента.
• ng-class - определяет классы для динамической загрузки.
• ng-controller - определяет JavaScript-контроллер для вычисления
HTML-выражений.
• ng-repeat - создает экземпляр для каждого элемента из коллекции.
http://www.slideshare.net/IgorShkulipa 24
Популярные Angular-директивы
• ng-show и ng-hide - показывает или скрывает элемент в зависимости
от значения логического выражения.
• ng-switch - создает экземпляр шаблона из множества вариантов, в
зависимости от значения выражения.
• ng-view - базовая директива, отвечает за обработку маршрутов,
которые принимают JSON перед отображением шаблонов,
управляемых указанными контроллерами.
http://www.slideshare.net/IgorShkulipa 25
Ссылки
http://angular.ru
http://habrahabr.ru/hub/angularjs/
http://metanit.com/web/angular/
http://www.slideshare.net/IgorShkulipa 26
Пример. Контроллеры (они же модели)
function HelloWorldController($scope) {
$scope.message = "Hello, World from AngularJS";
}
function PeopleController($scope) {
$scope.people = [
{
"name": "Ivan",
"middle":"Ivanovich",
"surname": "Ivanov",
"email":"ivan@ivanov.com"
},
{
"name": "Petr",
"middle": "Petrovich",
"surname": "Petrov",
"email": "petr@petrov.com"
},
{
"name": "Sidor",
"middle": "Sidorovich",
"surname": "Sidorov",
"email": "sidor@sidorov.com"
},
];
}
http://www.slideshare.net/IgorShkulipa 27
Пример. HTML
<!DOCTYPE html>
<html ng-app>
<head>
<title>AngularJS Example</title>
<link href="css/bootstrap.css" rel="stylesheet" media="screen">
<script src="js/angular.min.js"></script>
<script src="js/mc.js"></script>
</head>
<body>
<h1 ng-controller="HelloWorldController">{{message}}</h1>
<ul ng-controller="PeopleController">
<li ng-repeat="per in people">
{{per.name}}&nbsp;{{per.middle}}&nbsp;{{per.surname}}
&nbsp;-&nbsp;<strong>{{per.email}}</strong>
</li>
</ul>
</body>
</html>
http://www.slideshare.net/IgorShkulipa 28
Результат
http://www.slideshare.net/IgorShkulipa 29
BackboneJS
BackboneJS — JavaScript-библиотека, основанная на шаблоне
проектирования Model-View-Presenter (MVP), предназначена для
разработки веб-приложений с поддержкой RESTful JSON интерфейса.
Backbone — очень лёгкая библиотека (упакованная и gzip-сжатая 6.3 Кб),
но для работы необходима библиотека Underscore.js, а для
поддержки REST API и работы с DOM элементами рекомендуется
подключить jQuery-подобную библиотеку: jQuery или Zepto.
Backbone.js создан Джереми Ашкенасом, который известен также как
создатель CoffeeScript.
Проект размещается на GitHub, с доступным аннотированным исходным
кодом, с онлайновыми тестами с примером приложения, со списком
туториалов и списком реальных проектов, которые используют
Backbone. Backbone доступен под лицензией MIT.
http://www.slideshare.net/IgorShkulipa 30
Каталог встроенных событий
• "add" (model, collection, options) — когда модель добавляется в коллекцию.
• "remove" (model, collection, options) — когда модель удаляется из коллекции.
• "reset" (collection, options) — когда всё содержимое коллекции заменяется.
• "sort" (collection, options) — когда коллекция была отсортирована.
• "change" (model, options) — когда атрибут модели меняется.
• "change:[attribute]" (model, value, options) — когда меняется конкретный
атрибут модели.
• "destroy" (model, collection, options) — когда модель уничтожена.
• "request" (model, xhr, options) — когда модель (или коллекция) отправляет
запрос на сервер.
• "sync" (model, resp, options) — когда модель была успешно синхронизирована с
сервером.
http://www.slideshare.net/IgorShkulipa 31
Каталог встроенных событий
• "error" (model, xhr, options) — когда вызов save провалился на
сервере.
• "invalid" (model, error, options) — модель не прошла валидацию на
клиенте.
• "route:[name]" (params) — когда один конкретный роут находит
соответствие.
• "route" (router, route, params) — когда любой из роутов находит
соответствие.
• "all" — это специальное событие срабатывает каждый раз, когда
срабатывает любое событие, передавая имя события первым
аргументом.
http://www.slideshare.net/IgorShkulipa 32
Backbone.Model
Модели содержат как интерактивные данные, так и большую часть
соответствующей логики: конвертации, валидации, вычисленные
свойства и контроль доступа.
Вы расширяете Backbone.Model методами своей предметной области, а
Model предоставляет базовый набор функциональности по управлению
изменениями.
http://www.slideshare.net/IgorShkulipa 33
Ссылки
http://backbonejs.org/
http://backbonejs.ru/
http://habrahabr.ru/post/127049/
https://github.com/kulakowka/Backbone.js-Russian
http://www.slideshare.net/IgorShkulipa 34
Пример. Заголовок
<!DOCTYPE html>
<html>
<head>
<title>BackboneJS Example</title>
<link href="css/bootstrap.css" rel="stylesheet"
media="screen">
<script src="js/jquery-1.9.1.min.js"></script>
<script src="js/underscore.js"></script>
<script src="js/backbone.js"></script>
</head>
<body>
<h1>Hello, World from BackboneJS</h1>
<div id="maindiv">
</div>
http://www.slideshare.net/IgorShkulipa 35
Пример. Шаблон представления
<script type="text/template" id="maintemplate">
<ul>
<% People.each( function(per) { %>
<li>
<%= per.get("name") %>&nbsp;
<%= per.get("middle") %>&nbsp;
<%= per.get("surname") %> -<strong>
<%= per.get("email") %></strong>
</li>
<% }); %>
</ul>
</script>
http://www.slideshare.net/IgorShkulipa 36
Пример. Модель и остальное
<script type="text/javascript">
var Persone = Backbone.Model.extend({
defaults: {
name: "Name",
middle: "Middle",
surname: "Surname",
email: "address@domain.com"
}
});
var PeopleList = Backbone.Collection.extend({
models: Persone
});
var People = new PeopleList([
new Persone({ name: "Ivan", middle: "Ivanovich",
surname: "Ivanov", email: "ivan@ivanov.com" }),
new Persone({ name: "Petr", middle: "Petrovich",
surname: "Petrov", email: "petr@petrov.com" }),
new Persone({ name: "Sidor", middle: "Sidorovich",
surname: "Sidorov", email: "sidor@sidorov.com" })
]);
http://www.slideshare.net/IgorShkulipa 37
Пример. Модель и остальное
var MainView = Backbone.View.extend({
el: "#maindiv",
initialize: function () {
this.render();
},
render: function () {
var templ = _.template($("#maintemplate").html(),
{ People: People.models });
$("#maindiv").html(templ);
return this;
}
});
var mv = new MainView();
</script>
</body>
</html>
http://www.slideshare.net/IgorShkulipa 38
Результат
http://www.slideshare.net/IgorShkulipa 39
KnockoutJS
Knockout использует архитектуру (MVVM) Модель - Представление -
Модель представления.
Элементы страницы, из которых она будет состоять, могут быть
помещены в представление.
Сами данные, которые будут отображаться, могут быть представлены в
модели.
Третий компонент, модель представления, - это по сути состояние
интерфейса в данный момент времени (комбинация данных и
представления с уже применёнными интерактивными элементами).
http://www.slideshare.net/IgorShkulipa 40
Ссылки
http://knockoutjs.com/
https://github.com/knockout/knockout
http://www.slideshare.net/IgorShkulipa 41
Пример. ViewModel
function persone(nam, mid, surn, em) {
this.name = ko.observable(nam);
this.middle = ko.observable(mid);
this.surname = ko.observable(surn);
this.email = ko.observable(em);
this.fullname = ko.pureComputed({
read: function () {
return this.name() + " " +
this.middle() + " " +
this.surname();
},
write: function (value) {
var iFirstSpace = value.indexOf(" ");
var iSecondSpace = value.lastIndexOf(" ");
if ((iFirstSpace > 0)&&(iSecondSpace>0)) {
this.name(value.substring(0, iFirstSpace));
this.middle(value.substring(iFirstSpace+1, iSecondSpace));
this.surname(value.substring(iSecondSpace+1));
}
},
owner: this
});
return this;
}
http://www.slideshare.net/IgorShkulipa 42
Пример. ViewModel
var HelloWorldViewModel = {
message: "Hello, World from KnockoutJS",
people: ko.observableArray([
new persone("Ivan", "Ivanovich", "Ivanov", "ivan@ivanov.com"),
new persone("Petr", "Petrovich", "Petrov", "petr@petrov.com"),
new persone("Sidor", "Sidorovich", "Sidorov", "sidor@sidorov.com")
])
}
http://www.slideshare.net/IgorShkulipa 43
Пример. HTML
<!DOCTYPE html>
<html>
<head>
<title>KnockoutJS Example</title>
<link href="css/bootstrap.css" rel="stylesheet" media="screen">
<script type="text/javascript" src="js/jquery-1.9.1.min.js"></script>
<script type="text/javascript" src="js/knockout-3.2.0.js"></script>
<script type="text/javascript" src="js/mc.js"></script>
</head>
<body>
<h1 data-bind="text:HelloWorldViewModel.message" ></h1>
<table>
<thead>
<tr><th>Name</th><th>Middle</th><th>Surname</th>
<th>E-Mail</th><th>Full Name</th></tr>
</thead>
<tbody data-bind="foreach: HelloWorldViewModel.people">
<tr>
<td><input data-bind="value: name"/></td>
<td><input data-bind="value: middle"/></td>
<td><input data-bind="value: surname"/></td>
<td><input data-bind="value: email"/></td>
<td><input data-bind="value: fullname"/></td>
</tr>
</tbody>
</table>
<script type="text/javascript">
ko.applyBindings(HelloWorldViewModel);
</script>
</body>
</html>
http://www.slideshare.net/IgorShkulipa 44
Результат
http://www.slideshare.net/IgorShkulipa 45
NodeJS
Node или Node.js — программная платформа, основанная на движке V8
(транслирующем JavaScript в машинный код), превращающая JavaScript из
узкоспециализированного языка в язык общего назначения.
Node.js добавляет возможность JavaScript взаимодействовать с устройствами ввода-
вывода через свой API (написанный на C++), подключать другие внешние
библиотеки, написанные на разных языках, обеспечивая вызовы к ним из
JavaScript-кода.
Node.js применяется преимущественно на сервере, выполняя роль веб-сервера, но
есть возможность разрабатывать на Node.js и десктопные оконные приложения
(при помощи node-webkit и AppJS для Linux, Windows и Mac OS) и даже
программировать микроконтроллеры (например, tessel и espruino). В основе
Node.js лежит событийно-ориентированное и асинхронное (или реактивное)
программирование с неблокирующим вводом/выводом.
Node разработал Райан Дал (англ. Ryan Dahl) в 2009 году после двух лет
экспериментирования над созданием серверных веб-компонентов. В ходе своих
исследований он пришёл к выводу, что вместо традиционной модели
параллелизма на основе потоков следует обратиться к событийно-
ориентированным системам. Эта модель была выбрана из-за простоты, низких
накладных расходов (по сравнению с идеологией «один поток на каждое
соединение») и быстродействия. Целью Node является предложить «простой
способ построения масштабируемых сетевых серверов».
http://www.slideshare.net/IgorShkulipa 46
Ссылки
http://nodejs.org/
http://www.nodebeginner.ru/
http://www.slideshare.net/IgorShkulipa 47
Пример. Самый простой сервер
var http = require("http");
http.createServer(function (request, response) {
response.writeHead(200, { “Content-Type”: “text/plain” });
response.end("Hello, World from NodeJS");
}).listen(12345);
http://www.slideshare.net/IgorShkulipa 48
Пример. Сервер немного сложнее
var http = require("http");
http.createServer(function (request, response) {
response.writeHead(200, { “Content-Type”: “text/html” });
response.write("<!DOCTYPE html><html><head>");
response.write("<title>"+"NodeJS Example"+"</title>");
response.write("</head><body>");
response.write("<h1>"+"Hello, World from NodeJS"+"</h1>");
response.end("</body></html>");
}).listen(12345);
http://www.slideshare.net/IgorShkulipa 49
Пример. Сервер еще немного сложнее
var http = require("http");
var fs = require("fs");
http.createServer(function (request, response) {
var index = fs.readFileSync("./index.html");
response.writeHead(200,
{ “Content-Type”: “text/html” });
response.end(index);
}).listen(12345);
Index.html
<!DOCTYPE html>
<html>
<head>
<title>NodeJS Example</title>
</head>
<body>
<h1>Hello, World from NodeJS</h1>
</body>
</html>
http://www.slideshare.net/IgorShkulipa 50
Пример. Сервер еще чуть-чуть сложнее
var http = require("http");
var url = require("url");
var fs = require("fs");
function Respond(request, response) {
var pathname = url.parse(request.url).pathname;
var index = fs.readFileSync("./" + pathname);
response.writeHead(200, { “Content-Type”: “text/html” });
response.end(index);
}
http.createServer(Respond).listen(12345);
Index.html
<!DOCTYPE html>
<html>
<head>
<title>NodeJS Example</title>
</head>
<body>
<h1>Hello, World from NodeJS</h1>
</body>
</html>
Index2.html
<!DOCTYPE html>
<html>
<head>
<title>NodeJS Example</title>
</head>
<body>
<h1>Hello, World from NodeJS and Index2</h1>
</body>
</html>
http://www.slideshare.net/IgorShkulipa 51
Результат

Weitere ähnliche Inhalte

Was ist angesagt?

ДАМП 2015 Екатеринбург
ДАМП 2015 ЕкатеринбургДАМП 2015 Екатеринбург
ДАМП 2015 ЕкатеринбургAlexey Ivanov
 
Компонентный подход: скучно, неинтересно, бесперспективно
Компонентный подход: скучно, неинтересно, бесперспективноКомпонентный подход: скучно, неинтересно, бесперспективно
Компонентный подход: скучно, неинтересно, бесперспективноRoman Dvornov
 
C# Web. Занятие 12.
C# Web. Занятие 12.C# Web. Занятие 12.
C# Web. Занятие 12.Igor Shkulipa
 
Внутреннее устройство и оптимизация бандла webpack
Внутреннее устройство и оптимизация бандла webpackВнутреннее устройство и оптимизация бандла webpack
Внутреннее устройство и оптимизация бандла webpackAlexey Ivanov
 
JavaScript Базовый. Занятие 10.
JavaScript Базовый. Занятие 10.JavaScript Базовый. Занятие 10.
JavaScript Базовый. Занятие 10.Igor Shkulipa
 
Basis.js - почему я не бросил разрабатывать свой фреймворк (extended)
Basis.js - почему я не бросил разрабатывать свой фреймворк (extended)Basis.js - почему я не бросил разрабатывать свой фреймворк (extended)
Basis.js - почему я не бросил разрабатывать свой фреймворк (extended)Roman Dvornov
 
JavaScript Базовый. Занятие 08.
JavaScript Базовый. Занятие 08.JavaScript Базовый. Занятие 08.
JavaScript Базовый. Занятие 08.Igor Shkulipa
 
Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)
Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)
Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)Ontico
 
Быстро о быстром
Быстро о быстромБыстро о быстром
Быстро о быстромRoman Dvornov
 
HTML 5: будущее уже сегодня, Сергей Байдачный, Microsoft Ukraine
HTML 5: будущее уже сегодня, Сергей Байдачный, Microsoft UkraineHTML 5: будущее уже сегодня, Сергей Байдачный, Microsoft Ukraine
HTML 5: будущее уже сегодня, Сергей Байдачный, Microsoft UkraineVolha Banadyseva
 
Knockoutjs на примере 2ГИС-Онлайн
Knockoutjs на примере 2ГИС-ОнлайнKnockoutjs на примере 2ГИС-Онлайн
Knockoutjs на примере 2ГИС-Онлайн2ГИС Технологии
 
Windows Azure and node js
Windows Azure and node jsWindows Azure and node js
Windows Azure and node jsAlex Tumanoff
 
Алексей Андросов "Тотальная заморозка = быстрая загрузка"
Алексей Андросов "Тотальная заморозка = быстрая загрузка"Алексей Андросов "Тотальная заморозка = быстрая загрузка"
Алексей Андросов "Тотальная заморозка = быстрая загрузка"Yandex
 
Жизнь в изоляции
Жизнь в изоляцииЖизнь в изоляции
Жизнь в изоляцииRoman Dvornov
 
Изоморфный JavaScript — будущее уже здесь
Изоморфный JavaScript — будущее уже здесьИзоморфный JavaScript — будущее уже здесь
Изоморфный JavaScript — будущее уже здесьCodeFest
 
Не бойся, это всего лишь данные... просто их много
Не бойся, это всего лишь данные... просто их многоНе бойся, это всего лишь данные... просто их много
Не бойся, это всего лишь данные... просто их многоRoman Dvornov
 
Приложения для Windows Phone: как мы это делаем #codefest
Приложения для Windows Phone: как мы это делаем #codefestПриложения для Windows Phone: как мы это делаем #codefest
Приложения для Windows Phone: как мы это делаем #codefestActis Wunderman
 
Basis.js — почему я не бросил разрабатывать свой фреймворк / Роман Дворнов (О...
Basis.js — почему я не бросил разрабатывать свой фреймворк / Роман Дворнов (О...Basis.js — почему я не бросил разрабатывать свой фреймворк / Роман Дворнов (О...
Basis.js — почему я не бросил разрабатывать свой фреймворк / Роман Дворнов (О...Ontico
 
CodeFest 2013. Никонов Г. — Как мы разрабатываем приложения для Windows Phone...
CodeFest 2013. Никонов Г. — Как мы разрабатываем приложения для Windows Phone...CodeFest 2013. Никонов Г. — Как мы разрабатываем приложения для Windows Phone...
CodeFest 2013. Никонов Г. — Как мы разрабатываем приложения для Windows Phone...CodeFest
 
«Организация Frontend-разработки на крупном проекте» — Дмитрий Кузнецов
«Организация Frontend-разработки на крупном проекте» — Дмитрий Кузнецов«Организация Frontend-разработки на крупном проекте» — Дмитрий Кузнецов
«Организация Frontend-разработки на крупном проекте» — Дмитрий Кузнецов2ГИС Технологии
 

Was ist angesagt? (20)

ДАМП 2015 Екатеринбург
ДАМП 2015 ЕкатеринбургДАМП 2015 Екатеринбург
ДАМП 2015 Екатеринбург
 
Компонентный подход: скучно, неинтересно, бесперспективно
Компонентный подход: скучно, неинтересно, бесперспективноКомпонентный подход: скучно, неинтересно, бесперспективно
Компонентный подход: скучно, неинтересно, бесперспективно
 
C# Web. Занятие 12.
C# Web. Занятие 12.C# Web. Занятие 12.
C# Web. Занятие 12.
 
Внутреннее устройство и оптимизация бандла webpack
Внутреннее устройство и оптимизация бандла webpackВнутреннее устройство и оптимизация бандла webpack
Внутреннее устройство и оптимизация бандла webpack
 
JavaScript Базовый. Занятие 10.
JavaScript Базовый. Занятие 10.JavaScript Базовый. Занятие 10.
JavaScript Базовый. Занятие 10.
 
Basis.js - почему я не бросил разрабатывать свой фреймворк (extended)
Basis.js - почему я не бросил разрабатывать свой фреймворк (extended)Basis.js - почему я не бросил разрабатывать свой фреймворк (extended)
Basis.js - почему я не бросил разрабатывать свой фреймворк (extended)
 
JavaScript Базовый. Занятие 08.
JavaScript Базовый. Занятие 08.JavaScript Базовый. Занятие 08.
JavaScript Базовый. Занятие 08.
 
Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)
Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)
Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)
 
Быстро о быстром
Быстро о быстромБыстро о быстром
Быстро о быстром
 
HTML 5: будущее уже сегодня, Сергей Байдачный, Microsoft Ukraine
HTML 5: будущее уже сегодня, Сергей Байдачный, Microsoft UkraineHTML 5: будущее уже сегодня, Сергей Байдачный, Microsoft Ukraine
HTML 5: будущее уже сегодня, Сергей Байдачный, Microsoft Ukraine
 
Knockoutjs на примере 2ГИС-Онлайн
Knockoutjs на примере 2ГИС-ОнлайнKnockoutjs на примере 2ГИС-Онлайн
Knockoutjs на примере 2ГИС-Онлайн
 
Windows Azure and node js
Windows Azure and node jsWindows Azure and node js
Windows Azure and node js
 
Алексей Андросов "Тотальная заморозка = быстрая загрузка"
Алексей Андросов "Тотальная заморозка = быстрая загрузка"Алексей Андросов "Тотальная заморозка = быстрая загрузка"
Алексей Андросов "Тотальная заморозка = быстрая загрузка"
 
Жизнь в изоляции
Жизнь в изоляцииЖизнь в изоляции
Жизнь в изоляции
 
Изоморфный JavaScript — будущее уже здесь
Изоморфный JavaScript — будущее уже здесьИзоморфный JavaScript — будущее уже здесь
Изоморфный JavaScript — будущее уже здесь
 
Не бойся, это всего лишь данные... просто их много
Не бойся, это всего лишь данные... просто их многоНе бойся, это всего лишь данные... просто их много
Не бойся, это всего лишь данные... просто их много
 
Приложения для Windows Phone: как мы это делаем #codefest
Приложения для Windows Phone: как мы это делаем #codefestПриложения для Windows Phone: как мы это делаем #codefest
Приложения для Windows Phone: как мы это делаем #codefest
 
Basis.js — почему я не бросил разрабатывать свой фреймворк / Роман Дворнов (О...
Basis.js — почему я не бросил разрабатывать свой фреймворк / Роман Дворнов (О...Basis.js — почему я не бросил разрабатывать свой фреймворк / Роман Дворнов (О...
Basis.js — почему я не бросил разрабатывать свой фреймворк / Роман Дворнов (О...
 
CodeFest 2013. Никонов Г. — Как мы разрабатываем приложения для Windows Phone...
CodeFest 2013. Никонов Г. — Как мы разрабатываем приложения для Windows Phone...CodeFest 2013. Никонов Г. — Как мы разрабатываем приложения для Windows Phone...
CodeFest 2013. Никонов Г. — Как мы разрабатываем приложения для Windows Phone...
 
«Организация Frontend-разработки на крупном проекте» — Дмитрий Кузнецов
«Организация Frontend-разработки на крупном проекте» — Дмитрий Кузнецов«Организация Frontend-разработки на крупном проекте» — Дмитрий Кузнецов
«Организация Frontend-разработки на крупном проекте» — Дмитрий Кузнецов
 

Andere mochten auch

Production diary 2
Production diary 2Production diary 2
Production diary 2Laila Jaleel
 
Fotos de la tesis
Fotos de la tesisFotos de la tesis
Fotos de la tesisIda Morán
 
σχέδιο προσέγγισης λογοτεχνικού κειμένου
σχέδιο προσέγγισης λογοτεχνικού κειμένουσχέδιο προσέγγισης λογοτεχνικού κειμένου
σχέδιο προσέγγισης λογοτεχνικού κειμένουMANOLIS MORAITIS
 
JavaScript Базовый. Занятие 05.
JavaScript Базовый. Занятие 05.JavaScript Базовый. Занятие 05.
JavaScript Базовый. Занятие 05.Igor Shkulipa
 
C# Web. Занятие 10.
C# Web. Занятие 10.C# Web. Занятие 10.
C# Web. Занятие 10.Igor Shkulipa
 
Production diary 10
Production diary 10Production diary 10
Production diary 10Laila Jaleel
 
Vijay Bhosekar_ Research Article_ Frontiers in Plant Science
Vijay Bhosekar_ Research Article_ Frontiers in Plant ScienceVijay Bhosekar_ Research Article_ Frontiers in Plant Science
Vijay Bhosekar_ Research Article_ Frontiers in Plant Sciencevijay bhosekar
 
C++ Базовый. Занятие 04.
C++ Базовый. Занятие 04.C++ Базовый. Занятие 04.
C++ Базовый. Занятие 04.Igor Shkulipa
 
C# Desktop. Занятие 09.
C# Desktop. Занятие 09.C# Desktop. Занятие 09.
C# Desktop. Занятие 09.Igor Shkulipa
 
Production diary 8
Production diary 8Production diary 8
Production diary 8Laila Jaleel
 
αφηγηματολογια
αφηγηματολογιααφηγηματολογια
αφηγηματολογιαMANOLIS MORAITIS
 
C++ Базовый. Занятие 08.
C++ Базовый. Занятие 08.C++ Базовый. Занятие 08.
C++ Базовый. Занятие 08.Igor Shkulipa
 
Production diary 3
Production diary 3Production diary 3
Production diary 3Laila Jaleel
 
JavaScript Базовый. Занятие 01.
JavaScript Базовый. Занятие 01.JavaScript Базовый. Занятие 01.
JavaScript Базовый. Занятие 01.Igor Shkulipa
 
10 hewan langka di indonesia
10 hewan langka di indonesia10 hewan langka di indonesia
10 hewan langka di indonesiadyahsudorowreti
 

Andere mochten auch (20)

Production diary 2
Production diary 2Production diary 2
Production diary 2
 
Fotos de la tesis
Fotos de la tesisFotos de la tesis
Fotos de la tesis
 
Nowhere But Niigata
Nowhere But NiigataNowhere But Niigata
Nowhere But Niigata
 
σχέδιο προσέγγισης λογοτεχνικού κειμένου
σχέδιο προσέγγισης λογοτεχνικού κειμένουσχέδιο προσέγγισης λογοτεχνικού κειμένου
σχέδιο προσέγγισης λογοτεχνικού κειμένου
 
JavaScript Базовый. Занятие 05.
JavaScript Базовый. Занятие 05.JavaScript Базовый. Занятие 05.
JavaScript Базовый. Занятие 05.
 
C# Web. Занятие 10.
C# Web. Занятие 10.C# Web. Занятие 10.
C# Web. Занятие 10.
 
Production diary 10
Production diary 10Production diary 10
Production diary 10
 
Energías limpias
Energías limpiasEnergías limpias
Energías limpias
 
Vijay Bhosekar_ Research Article_ Frontiers in Plant Science
Vijay Bhosekar_ Research Article_ Frontiers in Plant ScienceVijay Bhosekar_ Research Article_ Frontiers in Plant Science
Vijay Bhosekar_ Research Article_ Frontiers in Plant Science
 
C++ Базовый. Занятие 04.
C++ Базовый. Занятие 04.C++ Базовый. Занятие 04.
C++ Базовый. Занятие 04.
 
C# Desktop. Занятие 09.
C# Desktop. Занятие 09.C# Desktop. Занятие 09.
C# Desktop. Занятие 09.
 
Production diary 8
Production diary 8Production diary 8
Production diary 8
 
SAEEDcv.
SAEEDcv.SAEEDcv.
SAEEDcv.
 
αφηγηματολογια
αφηγηματολογιααφηγηματολογια
αφηγηματολογια
 
MME 2016
MME 2016MME 2016
MME 2016
 
C++ Базовый. Занятие 08.
C++ Базовый. Занятие 08.C++ Базовый. Занятие 08.
C++ Базовый. Занятие 08.
 
Production diary 3
Production diary 3Production diary 3
Production diary 3
 
JavaScript Базовый. Занятие 01.
JavaScript Базовый. Занятие 01.JavaScript Базовый. Занятие 01.
JavaScript Базовый. Занятие 01.
 
Biotecnología
BiotecnologíaBiotecnología
Biotecnología
 
10 hewan langka di indonesia
10 hewan langka di indonesia10 hewan langka di indonesia
10 hewan langka di indonesia
 

Ähnlich wie JavaScript Базовый. Занятие 11.

I tmozg js_school
I tmozg js_schoolI tmozg js_school
I tmozg js_schoolITmozg
 
Quick introduction jQuery
Quick introduction jQueryQuick introduction jQuery
Quick introduction jQueryShalva Usubov
 
Web internship java script
Web internship   java scriptWeb internship   java script
Web internship java scriptNoveo
 
jQuery. Введение и практика
jQuery. Введение и практикаjQuery. Введение и практика
jQuery. Введение и практикаSlava Aliev
 
2014 Jeeconf - Geb Spock
2014 Jeeconf - Geb Spock2014 Jeeconf - Geb Spock
2014 Jeeconf - Geb SpockBohdan Danyliuk
 
Drupal 7 и history.js или как ajax инфицировать сайт
Drupal 7 и history.js или как ajax инфицировать сайтDrupal 7 и history.js или как ajax инфицировать сайт
Drupal 7 и history.js или как ajax инфицировать сайтDrupalCamp Kyiv Рысь
 
jQuery как путь к RIA
jQuery как путь к RIAjQuery как путь к RIA
jQuery как путь к RIAGetDev.NET
 
Selenide puzzlers @ devclub.eu
Selenide puzzlers @ devclub.euSelenide puzzlers @ devclub.eu
Selenide puzzlers @ devclub.euAndrei Solntsev
 
Фундаментальные основы разработки под iOS. Павел Тайкало
Фундаментальные основы разработки под iOS. Павел ТайкалоФундаментальные основы разработки под iOS. Павел Тайкало
Фундаментальные основы разработки под iOS. Павел ТайкалоStanfy
 
Александр Кашеверов - Коротко про WEB
Александр Кашеверов - Коротко про WEBАлександр Кашеверов - Коротко про WEB
Александр Кашеверов - Коротко про WEBDataArt
 
Making Scalable JavaScript Application
Making Scalable JavaScript ApplicationMaking Scalable JavaScript Application
Making Scalable JavaScript ApplicationMikhail Davydov
 
Михаил Давыдов "Масштабируемые JavaScript-приложения"
Михаил Давыдов "Масштабируемые JavaScript-приложения"Михаил Давыдов "Масштабируемые JavaScript-приложения"
Михаил Давыдов "Масштабируемые JavaScript-приложения"Yandex
 
Сергей Константинов — Что интересного готовит нам W3C
Сергей Константинов — Что интересного готовит нам W3CСергей Константинов — Что интересного готовит нам W3C
Сергей Константинов — Что интересного готовит нам W3CYandex
 
WebCamp: Developer Day: Parse'им бэкенд - Аким Халилов
WebCamp: Developer Day: Parse'им бэкенд - Аким ХалиловWebCamp: Developer Day: Parse'им бэкенд - Аким Халилов
WebCamp: Developer Day: Parse'им бэкенд - Аким ХалиловGeeksLab Odessa
 
Web весна 2012 лекция 9
Web весна 2012 лекция 9Web весна 2012 лекция 9
Web весна 2012 лекция 9Technopark
 
Yii development
Yii developmentYii development
Yii developmentMageCloud
 
Как мы документируем программные интерфейсы. YaC 2014
Как мы документируем программные интерфейсы. YaC 2014Как мы документируем программные интерфейсы. YaC 2014
Как мы документируем программные интерфейсы. YaC 2014Yandex
 

Ähnlich wie JavaScript Базовый. Занятие 11. (20)

I tmozg js_school
I tmozg js_schoolI tmozg js_school
I tmozg js_school
 
Quick introduction jQuery
Quick introduction jQueryQuick introduction jQuery
Quick introduction jQuery
 
Web internship java script
Web internship   java scriptWeb internship   java script
Web internship java script
 
jQuery. Введение и практика
jQuery. Введение и практикаjQuery. Введение и практика
jQuery. Введение и практика
 
2014 Jeeconf - Geb Spock
2014 Jeeconf - Geb Spock2014 Jeeconf - Geb Spock
2014 Jeeconf - Geb Spock
 
Drupal 7 и history.js или как ajax инфицировать сайт
Drupal 7 и history.js или как ajax инфицировать сайтDrupal 7 и history.js или как ajax инфицировать сайт
Drupal 7 и history.js или как ajax инфицировать сайт
 
Jsfwdays 2013-2
Jsfwdays 2013-2Jsfwdays 2013-2
Jsfwdays 2013-2
 
Drupal 7 and History.js
Drupal 7 and History.jsDrupal 7 and History.js
Drupal 7 and History.js
 
jQuery как путь к RIA
jQuery как путь к RIAjQuery как путь к RIA
jQuery как путь к RIA
 
Selenide puzzlers @ devclub.eu
Selenide puzzlers @ devclub.euSelenide puzzlers @ devclub.eu
Selenide puzzlers @ devclub.eu
 
Фундаментальные основы разработки под iOS. Павел Тайкало
Фундаментальные основы разработки под iOS. Павел ТайкалоФундаментальные основы разработки под iOS. Павел Тайкало
Фундаментальные основы разработки под iOS. Павел Тайкало
 
Александр Кашеверов - Коротко про WEB
Александр Кашеверов - Коротко про WEBАлександр Кашеверов - Коротко про WEB
Александр Кашеверов - Коротко про WEB
 
Making Scalable JavaScript Application
Making Scalable JavaScript ApplicationMaking Scalable JavaScript Application
Making Scalable JavaScript Application
 
Михаил Давыдов "Масштабируемые JavaScript-приложения"
Михаил Давыдов "Масштабируемые JavaScript-приложения"Михаил Давыдов "Масштабируемые JavaScript-приложения"
Михаил Давыдов "Масштабируемые JavaScript-приложения"
 
Js fuckworks
Js fuckworksJs fuckworks
Js fuckworks
 
Сергей Константинов — Что интересного готовит нам W3C
Сергей Константинов — Что интересного готовит нам W3CСергей Константинов — Что интересного готовит нам W3C
Сергей Константинов — Что интересного готовит нам W3C
 
WebCamp: Developer Day: Parse'им бэкенд - Аким Халилов
WebCamp: Developer Day: Parse'им бэкенд - Аким ХалиловWebCamp: Developer Day: Parse'им бэкенд - Аким Халилов
WebCamp: Developer Day: Parse'им бэкенд - Аким Халилов
 
Web весна 2012 лекция 9
Web весна 2012 лекция 9Web весна 2012 лекция 9
Web весна 2012 лекция 9
 
Yii development
Yii developmentYii development
Yii development
 
Как мы документируем программные интерфейсы. YaC 2014
Как мы документируем программные интерфейсы. YaC 2014Как мы документируем программные интерфейсы. YaC 2014
Как мы документируем программные интерфейсы. YaC 2014
 

Mehr von Igor Shkulipa

Общие темы. Тема 03.
Общие темы. Тема 03. Общие темы. Тема 03.
Общие темы. Тема 03. Igor Shkulipa
 
Общие темы. Тема 02.
Общие темы. Тема 02.Общие темы. Тема 02.
Общие темы. Тема 02.Igor Shkulipa
 
Общие темы. Тема 01.
Общие темы. Тема 01.Общие темы. Тема 01.
Общие темы. Тема 01.Igor Shkulipa
 
JavaScript Базовый. Занятие 06.
JavaScript Базовый. Занятие 06.JavaScript Базовый. Занятие 06.
JavaScript Базовый. Занятие 06.Igor Shkulipa
 
JavaScript Базовый. Занятие 04.
JavaScript Базовый. Занятие 04.JavaScript Базовый. Занятие 04.
JavaScript Базовый. Занятие 04.Igor Shkulipa
 
JavaScript Базовый. Занятие 03.
JavaScript Базовый. Занятие 03.JavaScript Базовый. Занятие 03.
JavaScript Базовый. Занятие 03.Igor Shkulipa
 
JavaScript Базовый. Занятие 02.
JavaScript Базовый. Занятие 02.JavaScript Базовый. Занятие 02.
JavaScript Базовый. Занятие 02.Igor Shkulipa
 
C# Web. Занятие 09.
C# Web. Занятие 09.C# Web. Занятие 09.
C# Web. Занятие 09.Igor Shkulipa
 
C# Web. Занятие 08.
C# Web. Занятие 08.C# Web. Занятие 08.
C# Web. Занятие 08.Igor Shkulipa
 
C# Web. Занятие 07.
C# Web. Занятие 07.C# Web. Занятие 07.
C# Web. Занятие 07.Igor Shkulipa
 
C# Web. Занятие 04.
C# Web. Занятие 04.C# Web. Занятие 04.
C# Web. Занятие 04.Igor Shkulipa
 
C# Web. Занятие 16.
C# Web. Занятие 16.C# Web. Занятие 16.
C# Web. Занятие 16.Igor Shkulipa
 
C# Web. Занятие 14.
C# Web. Занятие 14.C# Web. Занятие 14.
C# Web. Занятие 14.Igor Shkulipa
 
C# Web. Занятие 15.
C# Web. Занятие 15.C# Web. Занятие 15.
C# Web. Занятие 15.Igor Shkulipa
 
C# Web. Занятие 11.
C# Web. Занятие 11.C# Web. Занятие 11.
C# Web. Занятие 11.Igor Shkulipa
 
C# Web. Занятие 05.
C# Web. Занятие 05.C# Web. Занятие 05.
C# Web. Занятие 05.Igor Shkulipa
 
C# Web. Занятие 03.
C# Web. Занятие 03.C# Web. Занятие 03.
C# Web. Занятие 03.Igor Shkulipa
 
C# Web. Занятие 06.
C# Web. Занятие 06.C# Web. Занятие 06.
C# Web. Занятие 06.Igor Shkulipa
 
C# Web. Занятие 02.
C# Web. Занятие 02.C# Web. Занятие 02.
C# Web. Занятие 02.Igor Shkulipa
 
C# Web. Занятие 01.
C# Web. Занятие 01.C# Web. Занятие 01.
C# Web. Занятие 01.Igor Shkulipa
 

Mehr von Igor Shkulipa (20)

Общие темы. Тема 03.
Общие темы. Тема 03. Общие темы. Тема 03.
Общие темы. Тема 03.
 
Общие темы. Тема 02.
Общие темы. Тема 02.Общие темы. Тема 02.
Общие темы. Тема 02.
 
Общие темы. Тема 01.
Общие темы. Тема 01.Общие темы. Тема 01.
Общие темы. Тема 01.
 
JavaScript Базовый. Занятие 06.
JavaScript Базовый. Занятие 06.JavaScript Базовый. Занятие 06.
JavaScript Базовый. Занятие 06.
 
JavaScript Базовый. Занятие 04.
JavaScript Базовый. Занятие 04.JavaScript Базовый. Занятие 04.
JavaScript Базовый. Занятие 04.
 
JavaScript Базовый. Занятие 03.
JavaScript Базовый. Занятие 03.JavaScript Базовый. Занятие 03.
JavaScript Базовый. Занятие 03.
 
JavaScript Базовый. Занятие 02.
JavaScript Базовый. Занятие 02.JavaScript Базовый. Занятие 02.
JavaScript Базовый. Занятие 02.
 
C# Web. Занятие 09.
C# Web. Занятие 09.C# Web. Занятие 09.
C# Web. Занятие 09.
 
C# Web. Занятие 08.
C# Web. Занятие 08.C# Web. Занятие 08.
C# Web. Занятие 08.
 
C# Web. Занятие 07.
C# Web. Занятие 07.C# Web. Занятие 07.
C# Web. Занятие 07.
 
C# Web. Занятие 04.
C# Web. Занятие 04.C# Web. Занятие 04.
C# Web. Занятие 04.
 
C# Web. Занятие 16.
C# Web. Занятие 16.C# Web. Занятие 16.
C# Web. Занятие 16.
 
C# Web. Занятие 14.
C# Web. Занятие 14.C# Web. Занятие 14.
C# Web. Занятие 14.
 
C# Web. Занятие 15.
C# Web. Занятие 15.C# Web. Занятие 15.
C# Web. Занятие 15.
 
C# Web. Занятие 11.
C# Web. Занятие 11.C# Web. Занятие 11.
C# Web. Занятие 11.
 
C# Web. Занятие 05.
C# Web. Занятие 05.C# Web. Занятие 05.
C# Web. Занятие 05.
 
C# Web. Занятие 03.
C# Web. Занятие 03.C# Web. Занятие 03.
C# Web. Занятие 03.
 
C# Web. Занятие 06.
C# Web. Занятие 06.C# Web. Занятие 06.
C# Web. Занятие 06.
 
C# Web. Занятие 02.
C# Web. Занятие 02.C# Web. Занятие 02.
C# Web. Занятие 02.
 
C# Web. Занятие 01.
C# Web. Занятие 01.C# Web. Занятие 01.
C# Web. Занятие 01.
 

JavaScript Базовый. Занятие 11.

  • 1. Темы лекции: Обзор веб-фреймворков. Тренер: Игорь Шкулипа, к.т.н. JavaScript. Базовый курс Занятие 11
  • 2. http://www.slideshare.net/IgorShkulipa 2 jQuery jQuery – это JavaScript-библиотека, фокусирующаяся на взаимодействии JavaScript, HTML и CSS. Что умеет jQuery: • Обращаться к любому элементу DOM (объектной модели документа) и не только обращаться, но и манипулировать ими. • Работать с событиями. • Легко осуществлять различные визуальные эффекты. • Работать с AJAX. • Имеет огромное количество JavaScript плагинов, предназначенных для создания элементов пользовательских интерфейсов.
  • 3. http://www.slideshare.net/IgorShkulipa 3 Функция $() $("div") вернет все div-элементы на странице. $(".someBlock") вернет все элементы с классом someBlock. $("#content") вернет элемент с идентификатором content. $("#content2 div.someBlock") вернет div-элементы с классом someBlock, которые находятся внутри элемента с идентификатором content2. $("div:odd") вернет div-элементы, находящиеся на странице под нечетными номерами. $("[value = 5]") вернет все элементы с атрибутом value, равным 5. С помощью функции $() из библиотеки, можно находить элементы на странице по различным параметрам
  • 4. http://www.slideshare.net/IgorShkulipa 4 Функция $() $("#bigIt").css("height") возвратит значение высоты у элемента с идентификатором bigIt. $("div").css("width", "20px") установит новое значение ширины всем div-элемента на странице. $("#bigIt").attr("class") возвратит значение класса элемента с id = bigIt. $("#bigIt").attr("class", "box") установит новое значение атрибута class у элемента с id = bigIt. $("#bigIt").html(<p>Новый!</p>) изменит все html-содержимое элемента с id = bigIt, на заданное в методе html. $("#bigIt").text() возвратит текст, находящийся внутри элемента с id = bigIt. $(".someBox").empty() очистить от содержимого элементы с классом someBox.
  • 5. http://www.slideshare.net/IgorShkulipa 5 Цепочки методов Важной особенностью большинства методов jQuery, является возможность связывать их в цепочки. Методы, манипулирующие элементами документа, обычно возвращают эти объекты для дальнейшего использования, что позволяет писать примерно следующее: $("#bigIt").empty().attr("class", "noContent"); // в результате, у элемента с идентификатором bigIt будет удалено все содержимое, // после чего ему будет установлен класс noContent.
  • 6. http://www.slideshare.net/IgorShkulipa 6 Работа с набором элементов Помимо манипуляций с выбранными элементами, jQuery позволяет работать с самим набором: изменять его, а так же работать с элементами по отдельности. $("div").parent() вернет родительские элементы всех div-ов. $("div").children() вернет дочерние элементы всех div-ов. $("#someId").next() вернет элемент, лежащий сразу после someId. $("div").prev() вернет элементы, лежащие перед div'ами. $("div").eq(i) вернет div-элемент, с индексом i в наборе. $("div").get(i) вернет DOM-объект div'а, с индексом i. $("div").get() вернет массив DOM-объеков всех div-ов. $("div").size() вернет размер набора (количествово div-ов).
  • 7. http://www.slideshare.net/IgorShkulipa 7 Анимационные эффекты Ключевым методом, на которой базируются все остальные, является метод animate(), с помощью которого можно задавать плавное изменение различных CSS-свойств: .animate(properties, [duration], [easing], [callback]) • properties — список CSS-свойств, участвующих в анимации и их конечных значений. Задаются объектом, в формате {ключ:значение}, например:{opacity: 50, width: 100, height: 200}. • duration — продолжительность выполнения анимации. Может быть задана в миллисекундах или строковым значением 'fast' или 'slow' (200 и 600 миллисекунд). • easing — изменение скорости анимации (будет ли она замедляется к концу выполнения или наоборот ускорится). Задается строковым значением: "linear" и "swing" (для равномерной анимации и анимации с ускорением). Другие варианты можно найти в плагинах. • callback — функция, которая будет вызвана после завершения анимации. $("#mydiv") .animate({height: "hide"}, 300) .text("Новый текст") .animate({height: "show"}, 300);
  • 8. http://www.slideshare.net/IgorShkulipa 8 Ajax В jQuery реализована возможность выполнения запросов к серверу без перезагрузки страницы (ajax). Базовыми функциями для ее работы являются post() и get(): $.post(url, [params], [callback], [dataType]) $.get(url, [params], [callback], [dataType]) • url — url-адрес, по которому будет отправлен запрос. • data — данные, которые будут отправлены на сервер. Они должны быть представлены объектом, в формате: {fName1:value1, fName2:value2, ...}. • callback — пользовательская функция, которая будет вызвана после ответа сервера. • dataType — ожидаемый тип данных, которые пришлет сервер в ответ на запрос. Простейший пример: $.get(“http://random.org");
  • 9. http://www.slideshare.net/IgorShkulipa 9 Другие возможности Существуют и другие возможности jQuery, например: • $.browser поможет узнать тип браузера. • $.support поможет узнать конкретные особенности браузера. • .offset() и .position() позволят узнать или изменить позицию выбранного элемента. • .width() и .height() позволят узнать или изменить размеры выбранного элемента. • .scrollTop() и .scrollLeft() позволят работать с прокруткой. Ссылка на русскоязычное описание библиотеки И на сайт разработчиков
  • 10. http://www.slideshare.net/IgorShkulipa 10 Пример «Крестики-нолики с jQuery» <!doctype html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=windows-1251"> <title>jQuery XO</title> <script type="text/javascript" src="jquery-1.2.6.js"></script> <script src="xo.js" language="javascript"></script> <link rel="stylesheet" type="text/css" href="xo.css" /> </head> <body> <table style="width:600px; height:600px;"> <tr><td id="11"></td> <td id="12"></td> <td id="13"></td></tr> <tr><td id="21"></td> <td id="22"></td> <td id="23"></td></tr> <tr><td id="31"></td> <td id="32"></td> <td id="33"></td></tr> </table> </body> </html> xo.html td, tr { border: 1px solid black; text-align: center; color:transparent; width: 33.33%; height: 33.33%; } xo.css
  • 11. http://www.slideshare.net/IgorShkulipa 11 xo.js функция проверки победы function CheckVictory(xo) { if ( //Строки (($("#11").text() == xo) && ($("#12").text() == xo) && ($("#13").text() == xo)) || (($("#21").text() == xo) && ($("#22").text() == xo) && ($("#23").text() == xo)) || (($("#31").text() == xo) && ($("#32").text() == xo) && ($("#33").text() == xo)) || //Столбцы (($("#11").text() == xo) && ($("#21").text() == xo) && ($("#31").text() == xo)) || (($("#12").text() == xo) && ($("#22").text() == xo) && ($("#32").text() == xo)) || (($("#13").text() == xo) && ($("#23").text() == xo) && ($("#33").text() == xo)) || //Диагонали (($("#11").text() == xo) && ($("#22").text() == xo) && ($("#33").text() == xo)) || (($("#31").text() == xo) && ($("#22").text() == xo) && ($("#13").text() == xo))) { if (xo == 'X') alert('Крестики победили!'); else alert('Нолики победили!'); } }
  • 12. http://www.slideshare.net/IgorShkulipa 12 xo.js функция, отмечающая ход function MarkXO(elem, xo) { elem.text(xo); elem.css("background-repeat", "no-repeat"); elem.css("background-position", "center"); if (xo == 'X') elem.css("background-image", "url('x.png')"); else elem.css("background-image", "url('o.png')"); }
  • 13. http://www.slideshare.net/IgorShkulipa 13 xo.js функция-обработчик клика ячейки var xoGlobal = 'O'; function ClickLogic() { text = $(this).text(); if (text == '') { if (xoGlobal == 'X') { xoGlobal = 'O' } else { xoGlobal = 'X' }; MarkXO($(this), xoGlobal); CheckVictory(xoGlobal); } else { alert("Занято!"); } }
  • 14. http://www.slideshare.net/IgorShkulipa 14 xo.js последняя «функция» $(document).ready( function () { $('td').click(ClickLogic); }); Эта запись «переводится», приблизительно, как «в качестве обработчика $(document).ready установить функцию, которая обработчиком клика td-шки устанавливает функцию ClickLogic»
  • 18. http://www.slideshare.net/IgorShkulipa 18 Bootstrap http://bootstrap-ru.com/ Twitter Bootstrap - это фреймворк для создания современных, кросс-браузерных и стандартизованных интерфейсов. Продуманная структура кода HTML, JavaScript и CSS дает вам возможность создавать множество самых разнообразных элементов интерфейса и сетку сайта. Основные инструменты Bootstrap: • Сетки — заранее заданные размеры колонок, которые можно сразу же использовать, например ширина колонки 90px относится к классу .span2, который мы можем использовать в CSS описании документа; • Шаблоны — фиксированный или резиновый шаблон документа; • Типографика — описания шрифтов, определение некоторых классов для шрифтов таких как код, цитаты и т.п.; • Медиа — представляет возможности управления изображениями и видео; • Таблицы — средства оформления таблиц, вплоть до добавления функциональности для обеспечения возможности сортировки; • Формы — классы для оформления не только форм, но и некоторых событий происходящих с ними; • Навигация — классы оформления для вкладок, страниц, меню и панелей инструментов; • Алерты — оформление диалоговых окон, подсказок и всплывающих окон.
  • 20. http://www.slideshare.net/IgorShkulipa 20 Пример <!DOCTYPE html> <html> <head> <title>Bootstrap Example</title> <link href="css/bootstrap.css" rel="stylesheet" media="screen"> </head> <body> <h1>Hello, World from Bootstrap</h1> <script src="http://code.jquery.com/jquery-latest.js"></script> <script src="js/bootstrap.min.js"></script> <div class="tabbable"> <ul class="nav nav-tabs"> <li class="active"><a href="#tab1" data-toggle="tab">Tab 1</a></li> <li><a href="#tab2" data-toggle="tab">Tab 2</a></li> </ul> <div class="tab-content"> <div class="tab-pane active" id="tab1"> <p>Hello from Tab 1</p> </div> <div class="tab-pane" id="tab2"> <p>Hello from Tab 2</p> </div> </div> </div> </body> </html>
  • 22. http://www.slideshare.net/IgorShkulipa 22 AngularJS AngularJS — JavaScript-фреймворк с открытым исходным кодом. Предназначен для разработки одностраничных приложений. Его цель — расширение браузерных приложений на основе MVC шаблона, а также упрощение тестирования и разработки. Фреймворк работает с HTML, содержащим дополнительные пользовательские атрибуты, которые описываются директивами, и связывает ввод или вывод области страницы с моделью, представляющей собой обычные переменные JavaScript. Значения этих переменных задаются вручную или извлекаются из статических или динамических JSON-данных. AngularJS спроектирован с убеждением, что декларативное программирование лучше всего подходит для построения пользовательских интерфейсов и описания программных компонентов, в то время как императивное программирование отлично подходит для описания бизнес-логики. Фреймворк адаптирует и расширяет традиционный HTML, чтобы обеспечить двустороннюю привязку данных для динамического контента, что позволяет автоматически синхронизировать модель и представление. В результате AngularJS уменьшает роль DOM-манипуляций и улучшает тестируемость.
  • 23. http://www.slideshare.net/IgorShkulipa 23 Популярные Angular-директивы С помощью директив AngularJS можно создавать пользовательские HTML- теги и атрибуты, чтобы добавить поведение некоторым элементам. • ng-app - объявляет элемент корневым для приложения. • ng-bind - автоматически заменяет текст HTML-элемента на значение переданного выражения. • ng-model - то же что и ng-bind, только обеспечивает двустороннее связывание данных. Изменится содержимое элемента, ангуляр изменит и значение модели. Изменится значение модели, ангуляр изменит текст внутри элемента. • ng-class - определяет классы для динамической загрузки. • ng-controller - определяет JavaScript-контроллер для вычисления HTML-выражений. • ng-repeat - создает экземпляр для каждого элемента из коллекции.
  • 24. http://www.slideshare.net/IgorShkulipa 24 Популярные Angular-директивы • ng-show и ng-hide - показывает или скрывает элемент в зависимости от значения логического выражения. • ng-switch - создает экземпляр шаблона из множества вариантов, в зависимости от значения выражения. • ng-view - базовая директива, отвечает за обработку маршрутов, которые принимают JSON перед отображением шаблонов, управляемых указанными контроллерами.
  • 26. http://www.slideshare.net/IgorShkulipa 26 Пример. Контроллеры (они же модели) function HelloWorldController($scope) { $scope.message = "Hello, World from AngularJS"; } function PeopleController($scope) { $scope.people = [ { "name": "Ivan", "middle":"Ivanovich", "surname": "Ivanov", "email":"ivan@ivanov.com" }, { "name": "Petr", "middle": "Petrovich", "surname": "Petrov", "email": "petr@petrov.com" }, { "name": "Sidor", "middle": "Sidorovich", "surname": "Sidorov", "email": "sidor@sidorov.com" }, ]; }
  • 27. http://www.slideshare.net/IgorShkulipa 27 Пример. HTML <!DOCTYPE html> <html ng-app> <head> <title>AngularJS Example</title> <link href="css/bootstrap.css" rel="stylesheet" media="screen"> <script src="js/angular.min.js"></script> <script src="js/mc.js"></script> </head> <body> <h1 ng-controller="HelloWorldController">{{message}}</h1> <ul ng-controller="PeopleController"> <li ng-repeat="per in people"> {{per.name}}&nbsp;{{per.middle}}&nbsp;{{per.surname}} &nbsp;-&nbsp;<strong>{{per.email}}</strong> </li> </ul> </body> </html>
  • 29. http://www.slideshare.net/IgorShkulipa 29 BackboneJS BackboneJS — JavaScript-библиотека, основанная на шаблоне проектирования Model-View-Presenter (MVP), предназначена для разработки веб-приложений с поддержкой RESTful JSON интерфейса. Backbone — очень лёгкая библиотека (упакованная и gzip-сжатая 6.3 Кб), но для работы необходима библиотека Underscore.js, а для поддержки REST API и работы с DOM элементами рекомендуется подключить jQuery-подобную библиотеку: jQuery или Zepto. Backbone.js создан Джереми Ашкенасом, который известен также как создатель CoffeeScript. Проект размещается на GitHub, с доступным аннотированным исходным кодом, с онлайновыми тестами с примером приложения, со списком туториалов и списком реальных проектов, которые используют Backbone. Backbone доступен под лицензией MIT.
  • 30. http://www.slideshare.net/IgorShkulipa 30 Каталог встроенных событий • "add" (model, collection, options) — когда модель добавляется в коллекцию. • "remove" (model, collection, options) — когда модель удаляется из коллекции. • "reset" (collection, options) — когда всё содержимое коллекции заменяется. • "sort" (collection, options) — когда коллекция была отсортирована. • "change" (model, options) — когда атрибут модели меняется. • "change:[attribute]" (model, value, options) — когда меняется конкретный атрибут модели. • "destroy" (model, collection, options) — когда модель уничтожена. • "request" (model, xhr, options) — когда модель (или коллекция) отправляет запрос на сервер. • "sync" (model, resp, options) — когда модель была успешно синхронизирована с сервером.
  • 31. http://www.slideshare.net/IgorShkulipa 31 Каталог встроенных событий • "error" (model, xhr, options) — когда вызов save провалился на сервере. • "invalid" (model, error, options) — модель не прошла валидацию на клиенте. • "route:[name]" (params) — когда один конкретный роут находит соответствие. • "route" (router, route, params) — когда любой из роутов находит соответствие. • "all" — это специальное событие срабатывает каждый раз, когда срабатывает любое событие, передавая имя события первым аргументом.
  • 32. http://www.slideshare.net/IgorShkulipa 32 Backbone.Model Модели содержат как интерактивные данные, так и большую часть соответствующей логики: конвертации, валидации, вычисленные свойства и контроль доступа. Вы расширяете Backbone.Model методами своей предметной области, а Model предоставляет базовый набор функциональности по управлению изменениями.
  • 34. http://www.slideshare.net/IgorShkulipa 34 Пример. Заголовок <!DOCTYPE html> <html> <head> <title>BackboneJS Example</title> <link href="css/bootstrap.css" rel="stylesheet" media="screen"> <script src="js/jquery-1.9.1.min.js"></script> <script src="js/underscore.js"></script> <script src="js/backbone.js"></script> </head> <body> <h1>Hello, World from BackboneJS</h1> <div id="maindiv"> </div>
  • 35. http://www.slideshare.net/IgorShkulipa 35 Пример. Шаблон представления <script type="text/template" id="maintemplate"> <ul> <% People.each( function(per) { %> <li> <%= per.get("name") %>&nbsp; <%= per.get("middle") %>&nbsp; <%= per.get("surname") %> -<strong> <%= per.get("email") %></strong> </li> <% }); %> </ul> </script>
  • 36. http://www.slideshare.net/IgorShkulipa 36 Пример. Модель и остальное <script type="text/javascript"> var Persone = Backbone.Model.extend({ defaults: { name: "Name", middle: "Middle", surname: "Surname", email: "address@domain.com" } }); var PeopleList = Backbone.Collection.extend({ models: Persone }); var People = new PeopleList([ new Persone({ name: "Ivan", middle: "Ivanovich", surname: "Ivanov", email: "ivan@ivanov.com" }), new Persone({ name: "Petr", middle: "Petrovich", surname: "Petrov", email: "petr@petrov.com" }), new Persone({ name: "Sidor", middle: "Sidorovich", surname: "Sidorov", email: "sidor@sidorov.com" }) ]);
  • 37. http://www.slideshare.net/IgorShkulipa 37 Пример. Модель и остальное var MainView = Backbone.View.extend({ el: "#maindiv", initialize: function () { this.render(); }, render: function () { var templ = _.template($("#maintemplate").html(), { People: People.models }); $("#maindiv").html(templ); return this; } }); var mv = new MainView(); </script> </body> </html>
  • 39. http://www.slideshare.net/IgorShkulipa 39 KnockoutJS Knockout использует архитектуру (MVVM) Модель - Представление - Модель представления. Элементы страницы, из которых она будет состоять, могут быть помещены в представление. Сами данные, которые будут отображаться, могут быть представлены в модели. Третий компонент, модель представления, - это по сути состояние интерфейса в данный момент времени (комбинация данных и представления с уже применёнными интерактивными элементами).
  • 41. http://www.slideshare.net/IgorShkulipa 41 Пример. ViewModel function persone(nam, mid, surn, em) { this.name = ko.observable(nam); this.middle = ko.observable(mid); this.surname = ko.observable(surn); this.email = ko.observable(em); this.fullname = ko.pureComputed({ read: function () { return this.name() + " " + this.middle() + " " + this.surname(); }, write: function (value) { var iFirstSpace = value.indexOf(" "); var iSecondSpace = value.lastIndexOf(" "); if ((iFirstSpace > 0)&&(iSecondSpace>0)) { this.name(value.substring(0, iFirstSpace)); this.middle(value.substring(iFirstSpace+1, iSecondSpace)); this.surname(value.substring(iSecondSpace+1)); } }, owner: this }); return this; }
  • 42. http://www.slideshare.net/IgorShkulipa 42 Пример. ViewModel var HelloWorldViewModel = { message: "Hello, World from KnockoutJS", people: ko.observableArray([ new persone("Ivan", "Ivanovich", "Ivanov", "ivan@ivanov.com"), new persone("Petr", "Petrovich", "Petrov", "petr@petrov.com"), new persone("Sidor", "Sidorovich", "Sidorov", "sidor@sidorov.com") ]) }
  • 43. http://www.slideshare.net/IgorShkulipa 43 Пример. HTML <!DOCTYPE html> <html> <head> <title>KnockoutJS Example</title> <link href="css/bootstrap.css" rel="stylesheet" media="screen"> <script type="text/javascript" src="js/jquery-1.9.1.min.js"></script> <script type="text/javascript" src="js/knockout-3.2.0.js"></script> <script type="text/javascript" src="js/mc.js"></script> </head> <body> <h1 data-bind="text:HelloWorldViewModel.message" ></h1> <table> <thead> <tr><th>Name</th><th>Middle</th><th>Surname</th> <th>E-Mail</th><th>Full Name</th></tr> </thead> <tbody data-bind="foreach: HelloWorldViewModel.people"> <tr> <td><input data-bind="value: name"/></td> <td><input data-bind="value: middle"/></td> <td><input data-bind="value: surname"/></td> <td><input data-bind="value: email"/></td> <td><input data-bind="value: fullname"/></td> </tr> </tbody> </table> <script type="text/javascript"> ko.applyBindings(HelloWorldViewModel); </script> </body> </html>
  • 45. http://www.slideshare.net/IgorShkulipa 45 NodeJS Node или Node.js — программная платформа, основанная на движке V8 (транслирующем JavaScript в машинный код), превращающая JavaScript из узкоспециализированного языка в язык общего назначения. Node.js добавляет возможность JavaScript взаимодействовать с устройствами ввода- вывода через свой API (написанный на C++), подключать другие внешние библиотеки, написанные на разных языках, обеспечивая вызовы к ним из JavaScript-кода. Node.js применяется преимущественно на сервере, выполняя роль веб-сервера, но есть возможность разрабатывать на Node.js и десктопные оконные приложения (при помощи node-webkit и AppJS для Linux, Windows и Mac OS) и даже программировать микроконтроллеры (например, tessel и espruino). В основе Node.js лежит событийно-ориентированное и асинхронное (или реактивное) программирование с неблокирующим вводом/выводом. Node разработал Райан Дал (англ. Ryan Dahl) в 2009 году после двух лет экспериментирования над созданием серверных веб-компонентов. В ходе своих исследований он пришёл к выводу, что вместо традиционной модели параллелизма на основе потоков следует обратиться к событийно- ориентированным системам. Эта модель была выбрана из-за простоты, низких накладных расходов (по сравнению с идеологией «один поток на каждое соединение») и быстродействия. Целью Node является предложить «простой способ построения масштабируемых сетевых серверов».
  • 47. http://www.slideshare.net/IgorShkulipa 47 Пример. Самый простой сервер var http = require("http"); http.createServer(function (request, response) { response.writeHead(200, { “Content-Type”: “text/plain” }); response.end("Hello, World from NodeJS"); }).listen(12345);
  • 48. http://www.slideshare.net/IgorShkulipa 48 Пример. Сервер немного сложнее var http = require("http"); http.createServer(function (request, response) { response.writeHead(200, { “Content-Type”: “text/html” }); response.write("<!DOCTYPE html><html><head>"); response.write("<title>"+"NodeJS Example"+"</title>"); response.write("</head><body>"); response.write("<h1>"+"Hello, World from NodeJS"+"</h1>"); response.end("</body></html>"); }).listen(12345);
  • 49. http://www.slideshare.net/IgorShkulipa 49 Пример. Сервер еще немного сложнее var http = require("http"); var fs = require("fs"); http.createServer(function (request, response) { var index = fs.readFileSync("./index.html"); response.writeHead(200, { “Content-Type”: “text/html” }); response.end(index); }).listen(12345); Index.html <!DOCTYPE html> <html> <head> <title>NodeJS Example</title> </head> <body> <h1>Hello, World from NodeJS</h1> </body> </html>
  • 50. http://www.slideshare.net/IgorShkulipa 50 Пример. Сервер еще чуть-чуть сложнее var http = require("http"); var url = require("url"); var fs = require("fs"); function Respond(request, response) { var pathname = url.parse(request.url).pathname; var index = fs.readFileSync("./" + pathname); response.writeHead(200, { “Content-Type”: “text/html” }); response.end(index); } http.createServer(Respond).listen(12345); Index.html <!DOCTYPE html> <html> <head> <title>NodeJS Example</title> </head> <body> <h1>Hello, World from NodeJS</h1> </body> </html> Index2.html <!DOCTYPE html> <html> <head> <title>NodeJS Example</title> </head> <body> <h1>Hello, World from NodeJS and Index2</h1> </body> </html>