Your SlideShare is downloading. ×
0
2014-08-02 03 Дмитрий Шматко. Первые впечатления от Node.js
2014-08-02 03 Дмитрий Шматко. Первые впечатления от Node.js
2014-08-02 03 Дмитрий Шматко. Первые впечатления от Node.js
2014-08-02 03 Дмитрий Шматко. Первые впечатления от Node.js
2014-08-02 03 Дмитрий Шматко. Первые впечатления от Node.js
2014-08-02 03 Дмитрий Шматко. Первые впечатления от Node.js
2014-08-02 03 Дмитрий Шматко. Первые впечатления от Node.js
2014-08-02 03 Дмитрий Шматко. Первые впечатления от Node.js
2014-08-02 03 Дмитрий Шматко. Первые впечатления от Node.js
2014-08-02 03 Дмитрий Шматко. Первые впечатления от Node.js
2014-08-02 03 Дмитрий Шматко. Первые впечатления от Node.js
2014-08-02 03 Дмитрий Шматко. Первые впечатления от Node.js
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

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

2014-08-02 03 Дмитрий Шматко. Первые впечатления от Node.js

174

Published on

Впечатления Java-разработчика от Node.js и его web-фреймворков.

Впечатления Java-разработчика от Node.js и его web-фреймворков.

Published in: Internet
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
174
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
1
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Первые впечатления от Node.js Javascript
  • 2. Источник: Google Trends Почему Node.js? 1) Платформа стремительно набирает популярность
  • 3. Почему Node.js? 2) Концепция платформы ● Frontend и Backend на одном языке. Появляются фреймворки, которые идут дальше (MeteorJS) и позволяют перемещать код от клиента к серверу и наоборот. ● Заточенность под high scale и высокую производительность: event- loop в основе, неблокирующее асинхронное I/O, вызываемое event- ами в тредах. 3) Полюбить фронтенд ● Frontend хорош концептуально - это то, что видит и трогает пользователь. ● Не все любят, для меня это кошмар.
  • 4. Принцип работы Node.js
  • 5. Фреймворки 1) Sails ● Как пример для подражания был взят Rails. ● В основе лежит MVC-паттерн, где-то внутри спрятан Express. ● Внутри есть мощная ORM Waterfall. ● Многое доступно из коробки. 2) Express ● API reference умещается на одной странице. ● Низкоуровневый, ещё ниже - делать всё прямо на Node.js. ● Один из самых популярных фреймворков (сравнимый только Connect, на основе которого он и сделан). ● Можно провести параллель: Express - Sinatra, Connect - Rack.
  • 6. Фреймворк Sails 1. MVC-паттерн 2. Всё можно добавить командами: 3. Отдельные конфиги для всего: БД, роутов, CSRF, локализации, ошибок, контроллеров и т.д. 4. Несколько template-движков: EJS, Jade 5. Livereload и автоматическая сборка $ sails new testProject - создаём проект $ sails generate controller comment create destroy tag like - добавляем контроллер с экшенами $ sails generate model - добавить модель (нету в стандартной поставке, но есть механизм расширений)
  • 7. Фреймворк Sails 6. ORM и встроенная валидация моделей module.exports = { tableName: 'twitter_blacklist', migrate: 'safe', autoCreatedAt: false, autoUpdatedAt: false, attributes: { messageId: { columnName: 'message_id', type: 'text', required: true } } }; // Find entities Broadcast .find(options) .sort("time DESC") .done(function(err, broadcasts){ // some code }); // Create entity Broadcast .create(broadcast) .done(function(err, broadcast) { // some code });
  • 8. Фреймворк Express $ express myapp var express = require('express'); var path = require('path'); var favicon = require('serve-favicon'); var logger = require('morgan'); var cookieParser = require('cookie-parser'); var bodyParser = require('body-parser'); var routes = require('./routes/index'); var users = require('./routes/users'); var app = express(); // view engine setup app.set('views', path.join(__dirname, 'views')); app.set('view engine', 'jade'); // middleware setup app.use(logger('dev')); app.use(bodyParser.json()); app.use(bodyParser.urlencoded()); app.use(cookieParser()); app.use(express.static(path.join(__dirname, 'public'))); app.use('/', routes); app.use('/users', users); /// catch 404 and forward to error handler app.use(function(req, res, next) { var err = new Error('Not Found'); err.status = 404; next(err); }); /// error handlers // development error handler // will print stacktrace if (app.get('env') === 'development') { app.use(function(err, req, res, next) { res.status(err.status || 500); res.render('error', { message: err.message, error: err }); }); } module.exports = app;
  • 9. Фреймворк Express 1. Можно создавать какую угодно структуру и использовать любую архитектуру. 2. Можно использовать ORM, а можно драйвер БД. 3. Express даёт несколько методов и объектов: Основные методы: app.use(middleware) - использовать middleware в цепочке app.all(‘/private’, requireAuthentihication) - использовать middleware для любого запроса по маске app.route(‘/path’).get(getMethod).post (postMethod) или router.use(‘path’, method) - роутинг app.listen(port) - запустить сервер Объекты: app.locals - объект, доступный во всех темлпейтах req - http запрос res - http ответ
  • 10. Впечатления 1. Sails.js - слишком высокоуровневый, в реальном приложении можно достаточно быстро попасть в ситуацию, когда его возможностей не будет хватать, а Express внутри себя он уже как-то инкапсулирует. 2. Express.js - фреймворк в самом расцвете лет. Уже есть всё, что надо, и не навешено ничего лишнего. И скорее всего не будет :) 3. Node.js - замечательный инструмент, очень динамично развивается. Подходит для многих задач. Если для ваших задач больше подходят слова JSON и NoSQL, чем транзакции и enterprise, то Node.js будет хорошим выбором.
  • 11. 2-ступенчатая транзакция tx.query(SQL_APPLY_REQUEST, [code], function(err, res) { if (err) { console.log("Applying request error:" + err); deferred.reject(err); } else if (res.affectedRows !== 1) { tx.rollback(); deferred.reject(new Error('WRONG_CODE')); } else { data.push(res); tx.query(SQL_CREATE_ADMIN, [code], function(err, res) { if (err) { console.log("Creating admin error:" + err); deferred.reject(err); } else { data.push(res); tx.commit(function(err){ if (err) { console.log("Error occurs during creating admin:" + err); deferred.reject(err); } else { var promise = findRequest(code); promise.then(function(data) { notify.process(data, 'request- applied'); }, function(err) { console.log("Cannot retrieve request data from db"); }); deferred.resolve(data); } }); } }); } });
  • 12. Спасибо за внимание! 1. Node.js - официальный сайт 2. Express.js - официальный сайт 3. Sails - официальный сайт 4. How do I get started with Node.js? на Stackoverflow 5. Art of Node на GitHub 6. Mixu’s Node Book

×