SlideShare a Scribd company logo
Стажировка-2014
Фреймворк Sails
(Node.js)
Занятие 8
Стажировка-2014
Программная платформа:
Javascript Engine (Google V8, используется в
Google Chrome)
Была переделана не слишком эффективная для
server-side браузерная event-driven модель на
более эффективную: однотредовый event loop
без блокировки
+
Добавлены асинхронные I/O функции:
каждая I/O функция должна быть выполнена в
виде callback.
Node.js
Стажировка-2014
Node.js слишком низкоуровневый.
Можно так написать код, что заблокируется всё
приложение.
Express
1 000 000 скачиваний в месяц
Конфигурация json, роутинг + ещё чуть-чуть.
Необходимый минимум для создания вёб-приложения.
Популярные фреймворки
Стажировка-2014
Sails
Основан на Express
20 000 скачиваний в месяц
Структура по паттерну MVC:
Model (на ORM Waterline)
View (EJS, но можно сменить на Jade)
Controller (роутинг + фильтры типа авторизации)
Популярные фреймворки
Стажировка-2014
Устанавливаем Node.js и NVM (Node
version manager):
curl
https://raw.githubusercontent.com/creationix/nvm/v0.7.0/install.sh | sh
nvm install 0.10
cd %project_dir%
nvm use
Если команда nvm install вызывает ошибку, нужно добавить в .bashrc
строку:
source ~/.nvm/nvm.sh
Установка
Стажировка-2014
Устанавливаем sails (не забываем активировать
ноду командой nvm use, без неё npm (Node Packaged
Modules) не будет работать)
npm -g install sails
Установка
Стажировка-2014
Webstorm
Sublime
Редактор
Стажировка-2014
Создаём приложение
sails new %project_dir%
(создаёт директорию и все нужные файлы)
Запускаем приложение, выход Ctrl+C
sails lift
Дебаг
node –debug app.js
Работа с Sails
Стажировка-2014
api - здесь будет само приложение
assets – статика: js, стили, изображения
сonfig – настройки sails
node_modules – модули, которые
использует приложение
views – шаблоны
package.json – файл настройки
после добавления модуля, чтобы он появился в
node_modules
npm install
Структура каталогов
Стажировка-2014
package.json – зависимости
сonfig/adapters.js – адаптеры подключения
к бд, логин-пароль лучше вынести в local.js
config/controllers.js – контроллеры
создаваемые по умолчанию
config/local.js – порт приложения,
настройки подключения к БД и т.д.
дополняем
// Database credentials
adapters: {
mysql: {
user: 'project1',
password: 'password1'
}
}
Конфигурация
Стажировка-2014
sails generate controller comment create destroy tag like
Сгенерирует контроллеры для
/comment/create
/comment/destroy
/comment/tag
/comment/like
config/routes.js
'/': {
controller: 'HomeController'
},
'/timeline-list': 'HomeController.timelineList',
'get /broadcast': 'HomeController.broadcast',
'post /broadcast/:id/like': 'HomeController.likeNews',
Маппинг
Стажировка-2014
Дефолтный “/” - index, res.view – по умолчанию view с таким же именем, иначе первый
параметр перед объектом с данными.
index: function (req, res) {
//Optional param for the broadcast
var from = req.param('from'); // параметр запроса
return res.view({
injectedScripts: injectedScripts,
from: from
}); // вьюха с переданными переменными
},
instagramList: function (req, res) {
var instagramPromise = instagramService.findInstagramsInDB();
instagramPromise.then(function(data) {
return res.json(data); // JSON
}, function(err) {
console.error("Instragram list retrieving error:" + err);
return res.serverError(err); // 500 -ая страница
});
},
Контроллер
Стажировка-2014
Html с фрагментами javascript
через <% %>
<div class="row translation color-text-dark" id="translation">
<div class="container container-main">
<div class="js-reload-translation row reload">
<span class="reload-btn js-reload-broadcast">
<span class="reload-img"></span>Обновить
</span>
</div>
<div class="row translation-feed paragraf-font text-clear js-wrap-broadcast"
<% if (from != undefined) {%>
data-from="<%= from %>"
<% } %>>
</div>
</div>
</div>
Partial
<%- partial('partials/header')%>
Шаблон
Стажировка-2014
Модель
attributes: {
name: {
type: 'string',
maxLength: 20,
minLength: 5
},
email: {
type: 'email',
required: true
}
}
Если произошла ошибка валидации, вместо успешного сохранения получим следующее:
err.ValidationError = {поля}
поле = [ошибки]
ошибка:
message – ошибка валидации
rule – какое правило было нарушено
Можно конечно и ручками
Валидация формы
Стажировка-2014
Модель Organizer (models/Organizer.js)
module.exports = {
tableName: 'organizer',
migrate: 'safe',
autoCreatedAt: false,
autoUpdatedAt: false,
attributes: {
name: 'string'
}
};
id само создастся. migrate: 'safe' – значит не создавать структуру, можно попробовать 'alter', но
глючит
Берём в базе Organizer.findOne(id).done(function(err, broadcast) {/*код*/});
Создаём Organizer.create(organizer).done(function(err, broadcast) {/*код*/});
Апдейтим broadcast.save(function(err) {/*код*/});
Подробнее в описании моделей на офсайте
Использование ORM
Стажировка-2014
Сайт Sails
Сайт Node.js
Сайт NPM – модули для Node.js
Сайт Express
Конец

More Related Content

What's hot (20)

PDF
Конструктор / Денис Паясь (Яндекс)
Ontico
 
PDF
Быстрый рендеринг с DOM шаблонизаторами / Борис Каплуновский (aviasales.ru)
Ontico
 
PDF
09 - Web-технологии. MVC фреймворки
Roman Brovko
 
PDF
#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...
JSib
 
PPTX
Автоматизируем тестирование UI с Ruby, Cucumber и Selenium
SQALab
 
PDF
«Организация Frontend-разработки на крупном проекте» — Дмитрий Кузнецов
2ГИС Технологии
 
PDF
Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)
Ontico
 
PDF
#5 "React.js" Антон Артамонов
JSib
 
PDF
2014-08-02 03 Дмитрий Шматко. Первые впечатления от Node.js
Омские ИТ-субботники
 
PPT
VMware Orchestrator
mikhail.mikheev
 
PDF
Лучший frontend-фреймворк, и почему вы его не хотите
CodeFest
 
PDF
#7 "Многообещающий JavaScript – Promises" Денис Речкунов
JSib
 
PDF
HTML5 Web Components: следующий шаг к модульности вашего проекта / Андрей Рах...
Ontico
 
PDF
Dump-IT Загрузка и инициализация JavaScript
Mikhail Davydov
 
PPTX
Как мы ускоряли WebGL / Мстислав Живодков (2GIS)
Ontico
 
PDF
«Continuous Integration — A to Z или Непрерывная интеграция — кто всё сломал?»
FDConf
 
PPTX
base.network — пиринговый веб на JavaScript / Денис Глазков (Lazada Rus)
Ontico
 
PDF
non-blocking java script
Ecommerce Solution Provider SysIQ
 
PPTX
Chef по обе стороны Bamboo / Артем Семенов (Align Technology)
Ontico
 
Конструктор / Денис Паясь (Яндекс)
Ontico
 
Быстрый рендеринг с DOM шаблонизаторами / Борис Каплуновский (aviasales.ru)
Ontico
 
09 - Web-технологии. MVC фреймворки
Roman Brovko
 
#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...
JSib
 
Автоматизируем тестирование UI с Ruby, Cucumber и Selenium
SQALab
 
«Организация Frontend-разработки на крупном проекте» — Дмитрий Кузнецов
2ГИС Технологии
 
Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)
Ontico
 
#5 "React.js" Антон Артамонов
JSib
 
2014-08-02 03 Дмитрий Шматко. Первые впечатления от Node.js
Омские ИТ-субботники
 
VMware Orchestrator
mikhail.mikheev
 
Лучший frontend-фреймворк, и почему вы его не хотите
CodeFest
 
#7 "Многообещающий JavaScript – Promises" Денис Речкунов
JSib
 
HTML5 Web Components: следующий шаг к модульности вашего проекта / Андрей Рах...
Ontico
 
Dump-IT Загрузка и инициализация JavaScript
Mikhail Davydov
 
Как мы ускоряли WebGL / Мстислав Живодков (2GIS)
Ontico
 
«Continuous Integration — A to Z или Непрерывная интеграция — кто всё сломал?»
FDConf
 
base.network — пиринговый веб на JavaScript / Денис Глазков (Lazada Rus)
Ontico
 
non-blocking java script
Ecommerce Solution Provider SysIQ
 
Chef по обе стороны Bamboo / Артем Семенов (Align Technology)
Ontico
 

Viewers also liked (20)

PPTX
Спецкурс 2014, занятие 9 (2 часть). Code conventions and best practices
7bits
 
PPTX
Стажировка-2014, занятие 11. MVP, метод прогрессивного JPEG, Story mapping, A...
7bits
 
PPTX
Стажировка-2015. Разработка. Занятие 10 (часть 2). Исключения и логи.
7bits
 
PPTX
Стажировка-2014, занятие 4. Планирование процесса тестирования.
7bits
 
PDF
Стажировка 2015. Разработка. Занятие 5. Использование nginx
7bits
 
PDF
Спецкурс 2014, занятие 6. Базы данных
7bits
 
PPTX
Курс Java-2016. Занятие 05. Тестирование и Java
7bits
 
PPTX
Стажировка-2014, занятие 10. Бизнес-модели и Lean startup.
7bits
 
PPTX
Спецкурс 2014, занятие 10. Lean startup
7bits
 
PPTX
Стажировка-2014, занятие 6 (часть 1). Web-приложения
7bits
 
PDF
Стажировка-2015. Дизайн. Занятие 4 (2 часть). Цвет в web-дизайне
7bits
 
PPTX
Стажировка-2015. Тестирование. Занятие 2. Планирование процесса тестирования.
7bits
 
PPTX
Стажировка-2015. Разработка. Занятие 8. Абстракции, именование,документирование
7bits
 
PPTX
Спецкурс 2014, занятие 10. Lean startup
7bits
 
PPTX
Стажировка-2014, занятие 2 (часть 2). Исключения и логи
7bits
 
PPTX
Стажировка-2015. Разработка. Занятие 10 (часть 1). Конфиги, сборка, автотесты
7bits
 
PDF
Стажировка 2015. Дизайн. Занятие 5. Адаптивный web-дизайн
7bits
 
PPTX
Спецкурс 2014, занятие 5 (часть 2). Git, GitHub и Open source
7bits
 
PPTX
Стажировка-2014, занятие 3. Тест-кейсы, ручное и автоматическое тестирование.
7bits
 
PPTX
Стажировка-2014, занятие 6 (часть 2). Транзакции в БД
7bits
 
Спецкурс 2014, занятие 9 (2 часть). Code conventions and best practices
7bits
 
Стажировка-2014, занятие 11. MVP, метод прогрессивного JPEG, Story mapping, A...
7bits
 
Стажировка-2015. Разработка. Занятие 10 (часть 2). Исключения и логи.
7bits
 
Стажировка-2014, занятие 4. Планирование процесса тестирования.
7bits
 
Стажировка 2015. Разработка. Занятие 5. Использование nginx
7bits
 
Спецкурс 2014, занятие 6. Базы данных
7bits
 
Курс Java-2016. Занятие 05. Тестирование и Java
7bits
 
Стажировка-2014, занятие 10. Бизнес-модели и Lean startup.
7bits
 
Спецкурс 2014, занятие 10. Lean startup
7bits
 
Стажировка-2014, занятие 6 (часть 1). Web-приложения
7bits
 
Стажировка-2015. Дизайн. Занятие 4 (2 часть). Цвет в web-дизайне
7bits
 
Стажировка-2015. Тестирование. Занятие 2. Планирование процесса тестирования.
7bits
 
Стажировка-2015. Разработка. Занятие 8. Абстракции, именование,документирование
7bits
 
Спецкурс 2014, занятие 10. Lean startup
7bits
 
Стажировка-2014, занятие 2 (часть 2). Исключения и логи
7bits
 
Стажировка-2015. Разработка. Занятие 10 (часть 1). Конфиги, сборка, автотесты
7bits
 
Стажировка 2015. Дизайн. Занятие 5. Адаптивный web-дизайн
7bits
 
Спецкурс 2014, занятие 5 (часть 2). Git, GitHub и Open source
7bits
 
Стажировка-2014, занятие 3. Тест-кейсы, ручное и автоматическое тестирование.
7bits
 
Стажировка-2014, занятие 6 (часть 2). Транзакции в БД
7bits
 
Ad

Similar to Стажировка-2014, занятие 8. Обзор Sails framework (Node.js) (9)

PPTX
Стажировка-2014, занятие 8. Обзор Rails framework (Ruby)
7bits
 
PPT
Node.JS: возможности для РНР-разработчика
Alexei Smolyanov
 
PPTX
AngularJS
GetDev.NET
 
PPTX
Node.js введение в технологию, КПИ #ITmeetingKPI
Timur Shemsedinov
 
PPTX
Sails js intro
Oleg Pimenov
 
PDF
C# Web. Занятие 16.
Igor Shkulipa
 
PDF
Фреймворки: недалёкое прошлое и ближайшее будущее
Yandex
 
PDF
Фреймворки: Недалёкое Прошлое и Ближайшее Будущее
MoscowJS
 
PDF
2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один
HappyDev
 
Стажировка-2014, занятие 8. Обзор Rails framework (Ruby)
7bits
 
Node.JS: возможности для РНР-разработчика
Alexei Smolyanov
 
AngularJS
GetDev.NET
 
Node.js введение в технологию, КПИ #ITmeetingKPI
Timur Shemsedinov
 
Sails js intro
Oleg Pimenov
 
C# Web. Занятие 16.
Igor Shkulipa
 
Фреймворки: недалёкое прошлое и ближайшее будущее
Yandex
 
Фреймворки: Недалёкое Прошлое и Ближайшее Будущее
MoscowJS
 
2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один
HappyDev
 
Ad

More from 7bits (20)

PDF
Гудбай, ИТ-лофт! Тарасенко Анна: Стартап = факап?
7bits
 
PDF
Гудбай, ИТ-лофт! Денис Нелюбин: Новейшая история ИТ-лофта
7bits
 
PDF
Гудбай, ИТ-лофт! Лопатюк Саша: Договоримся не плакать
7bits
 
PDF
Гудбай, ИТ-лофт! Гончаровский Игорь: IT-Loft без связи
7bits
 
PDF
Гудбай, ИТ-лофт! Мячин Сергей: LUDUM DARE + IT-LOFT = LOVE
7bits
 
PDF
Goodbye, IT-loft! Тараканов Алексей: Идеология в IT
7bits
 
PPTX
Курс Java-2016. Занятие 13. Spring
7bits
 
PDF
Курс Java-2016. Занятие 12. DBMS, JDBC
7bits
 
PDF
Курс Java-2016. Занятие 11. Servlets, JSP
7bits
 
PDF
Курс Java-2016. Занятие 10. Reflection, mock
7bits
 
PDF
Курс Java-2016. Занятие 09. Web
7bits
 
PDF
Курс Java-2016. Занятие 08. Итераторы, многопоточность
7bits
 
PDF
Курс Java-2016. Занятие 07. Логи, фасады, библиотеки и коллекции
7bits
 
PDF
Курс Java-2016. Занятие 06. Файлы и ввод-вывод
7bits
 
PDF
Курс Java-2016. Занятие 04 (часть 2). Git и GitHub
7bits
 
PDF
Курс Java-2016. Занятие 04 (часть 1). Еще немного про Generics
7bits
 
PPTX
курс Java 2016. занятие 03. интерфейсы, generic, исключения
7bits
 
PPTX
Курс Java-2016. Занятие 02. Пакеты, сборка проекта с Maven
7bits
 
PPTX
Курс Java-2016. Занятие 01. Введение в Java как технологию
7bits
 
PPTX
Спецкурс-2015. Занятие 05. Системы контроля версий
7bits
 
Гудбай, ИТ-лофт! Тарасенко Анна: Стартап = факап?
7bits
 
Гудбай, ИТ-лофт! Денис Нелюбин: Новейшая история ИТ-лофта
7bits
 
Гудбай, ИТ-лофт! Лопатюк Саша: Договоримся не плакать
7bits
 
Гудбай, ИТ-лофт! Гончаровский Игорь: IT-Loft без связи
7bits
 
Гудбай, ИТ-лофт! Мячин Сергей: LUDUM DARE + IT-LOFT = LOVE
7bits
 
Goodbye, IT-loft! Тараканов Алексей: Идеология в IT
7bits
 
Курс Java-2016. Занятие 13. Spring
7bits
 
Курс Java-2016. Занятие 12. DBMS, JDBC
7bits
 
Курс Java-2016. Занятие 11. Servlets, JSP
7bits
 
Курс Java-2016. Занятие 10. Reflection, mock
7bits
 
Курс Java-2016. Занятие 09. Web
7bits
 
Курс Java-2016. Занятие 08. Итераторы, многопоточность
7bits
 
Курс Java-2016. Занятие 07. Логи, фасады, библиотеки и коллекции
7bits
 
Курс Java-2016. Занятие 06. Файлы и ввод-вывод
7bits
 
Курс Java-2016. Занятие 04 (часть 2). Git и GitHub
7bits
 
Курс Java-2016. Занятие 04 (часть 1). Еще немного про Generics
7bits
 
курс Java 2016. занятие 03. интерфейсы, generic, исключения
7bits
 
Курс Java-2016. Занятие 02. Пакеты, сборка проекта с Maven
7bits
 
Курс Java-2016. Занятие 01. Введение в Java как технологию
7bits
 
Спецкурс-2015. Занятие 05. Системы контроля версий
7bits
 

Стажировка-2014, занятие 8. Обзор Sails framework (Node.js)

  • 2. Стажировка-2014 Программная платформа: Javascript Engine (Google V8, используется в Google Chrome) Была переделана не слишком эффективная для server-side браузерная event-driven модель на более эффективную: однотредовый event loop без блокировки + Добавлены асинхронные I/O функции: каждая I/O функция должна быть выполнена в виде callback. Node.js
  • 3. Стажировка-2014 Node.js слишком низкоуровневый. Можно так написать код, что заблокируется всё приложение. Express 1 000 000 скачиваний в месяц Конфигурация json, роутинг + ещё чуть-чуть. Необходимый минимум для создания вёб-приложения. Популярные фреймворки
  • 4. Стажировка-2014 Sails Основан на Express 20 000 скачиваний в месяц Структура по паттерну MVC: Model (на ORM Waterline) View (EJS, но можно сменить на Jade) Controller (роутинг + фильтры типа авторизации) Популярные фреймворки
  • 5. Стажировка-2014 Устанавливаем Node.js и NVM (Node version manager): curl https://raw.githubusercontent.com/creationix/nvm/v0.7.0/install.sh | sh nvm install 0.10 cd %project_dir% nvm use Если команда nvm install вызывает ошибку, нужно добавить в .bashrc строку: source ~/.nvm/nvm.sh Установка
  • 6. Стажировка-2014 Устанавливаем sails (не забываем активировать ноду командой nvm use, без неё npm (Node Packaged Modules) не будет работать) npm -g install sails Установка
  • 8. Стажировка-2014 Создаём приложение sails new %project_dir% (создаёт директорию и все нужные файлы) Запускаем приложение, выход Ctrl+C sails lift Дебаг node –debug app.js Работа с Sails
  • 9. Стажировка-2014 api - здесь будет само приложение assets – статика: js, стили, изображения сonfig – настройки sails node_modules – модули, которые использует приложение views – шаблоны package.json – файл настройки после добавления модуля, чтобы он появился в node_modules npm install Структура каталогов
  • 10. Стажировка-2014 package.json – зависимости сonfig/adapters.js – адаптеры подключения к бд, логин-пароль лучше вынести в local.js config/controllers.js – контроллеры создаваемые по умолчанию config/local.js – порт приложения, настройки подключения к БД и т.д. дополняем // Database credentials adapters: { mysql: { user: 'project1', password: 'password1' } } Конфигурация
  • 11. Стажировка-2014 sails generate controller comment create destroy tag like Сгенерирует контроллеры для /comment/create /comment/destroy /comment/tag /comment/like config/routes.js '/': { controller: 'HomeController' }, '/timeline-list': 'HomeController.timelineList', 'get /broadcast': 'HomeController.broadcast', 'post /broadcast/:id/like': 'HomeController.likeNews', Маппинг
  • 12. Стажировка-2014 Дефолтный “/” - index, res.view – по умолчанию view с таким же именем, иначе первый параметр перед объектом с данными. index: function (req, res) { //Optional param for the broadcast var from = req.param('from'); // параметр запроса return res.view({ injectedScripts: injectedScripts, from: from }); // вьюха с переданными переменными }, instagramList: function (req, res) { var instagramPromise = instagramService.findInstagramsInDB(); instagramPromise.then(function(data) { return res.json(data); // JSON }, function(err) { console.error("Instragram list retrieving error:" + err); return res.serverError(err); // 500 -ая страница }); }, Контроллер
  • 13. Стажировка-2014 Html с фрагментами javascript через <% %> <div class="row translation color-text-dark" id="translation"> <div class="container container-main"> <div class="js-reload-translation row reload"> <span class="reload-btn js-reload-broadcast"> <span class="reload-img"></span>Обновить </span> </div> <div class="row translation-feed paragraf-font text-clear js-wrap-broadcast" <% if (from != undefined) {%> data-from="<%= from %>" <% } %>> </div> </div> </div> Partial <%- partial('partials/header')%> Шаблон
  • 14. Стажировка-2014 Модель attributes: { name: { type: 'string', maxLength: 20, minLength: 5 }, email: { type: 'email', required: true } } Если произошла ошибка валидации, вместо успешного сохранения получим следующее: err.ValidationError = {поля} поле = [ошибки] ошибка: message – ошибка валидации rule – какое правило было нарушено Можно конечно и ручками Валидация формы
  • 15. Стажировка-2014 Модель Organizer (models/Organizer.js) module.exports = { tableName: 'organizer', migrate: 'safe', autoCreatedAt: false, autoUpdatedAt: false, attributes: { name: 'string' } }; id само создастся. migrate: 'safe' – значит не создавать структуру, можно попробовать 'alter', но глючит Берём в базе Organizer.findOne(id).done(function(err, broadcast) {/*код*/}); Создаём Organizer.create(organizer).done(function(err, broadcast) {/*код*/}); Апдейтим broadcast.save(function(err) {/*код*/}); Подробнее в описании моделей на офсайте Использование ORM
  • 16. Стажировка-2014 Сайт Sails Сайт Node.js Сайт NPM – модули для Node.js Сайт Express Конец