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'
}
}
Конфигурация
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 -ая страница
});
},
Контроллер
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