22Nov

expeess_p1
Всем привет! В этой и в следующих статьях мы будем рассматривать различные темы по разработке в контексте одного приложения, которое будет постепенно дорабатываться. Это приложение – веб-чат. Но это не просто веб-чат, а это веб-чат, который должен продемонстрировать правильную конфигурацию, как делать обычные страницы при помощи Node.js и фреймворка Express , как делать шаблонизацию, JSON-сервис, авторизацию, чат, Socket, как работать с базой данных и т.д. Статьи будут содержать в себе материалы сделанные с использованием версией фреймворка Express 3, сейчас актуальной версией  является Express 4. Устаревшие features Express 3 в статьях не используются, так что единственное существенное отличие – в Express 4 это то , что многие библиотеки были вынесены отдельно из фреймворка, см. Migrating from 3.x to 4.x. Если вы хотите следовать нашим урокам , то рекомендуется:

npm i express@3

А далее переход на версию 4 будет для вас очевиден.

express

Начнем мы с технологии Express , и затем по мере разработки чата будем знакомиться с другими аспектами, которые здесь перечислены.

Итак, пустая директория. Для того, чтобы создать сайт,  будем использовать систему Express :

npm install i -g [email protected]

Expressэто фреймворк на Node.js, который наиболее часто используется для создания сайтов и веб-сервисов. Установим его глобально, потому что нам понадобится специальная утилита Express. Она позволяет быстро генерировать структуру сайта, самые основные файлы.

 express –help

показывает опции. Нам  понадобятся:

express –s  –e

то есть, в только что созданный сайт подключить сразу поддержку сессий и поддержку шаблонизатора --ejs. Как подключается и что работает мы посмотрим уже по ходу дела. Итак, готово.

Открываем это в WebStorm. Вместо него может быть и любой другой удобный вам редактор, и смотрим что cгенерировалось. App.js – это самый главный файл, мы посмотрим его в деталях очень скоро.

/**
 * Module dependencies.
 */

var express = require('express');
var routes = require('./routes');
var user = require('./routes/user');
var http = require('http');
var path = require('path');

var app = express();

// all environments
app.set('port', process.env.PORT || 3000);
app.set('views', __dirname + '/views');
app.set('view engine', 'ejs');
app.use(express.favicon());
app.use(express.logger('dev'));
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(express.cookieParser('your secret here'));
app.use(express.session());
app.use(app.router);
app.use(express.static(path.join(__dirname, 'public')));

// development only
if ('development' == app.get('env')) {
  app.use(express.errorHandler());
}

app.get('/', routes.index);
app.get('/users', user.list);

http.createServer(app).listen(app.get('port'), function(){
  console.log('Express server listening on port ' + app.get('port'));
});

 Package.json– это основной файл приложения. Добавим туда название нашего проекта.

{
  "name": "chat",
  "version": "0.0.1",
  "private": true,
  "scripts": {
    "start": "node app.js"
  },
  "dependencies": {
    "express": "3.3.8",
    "ejs": "*"
  }
}

Для того, чтоб проект запустился нужны dependencies. Поэтому  опять заходим в консоль и вводим:

 npm i 

То, что есть в рackage.json, поставится в node_modules. Появилась новая директория. Модули необходимые, чтобы эта штука работала поставлены. Для того, чтобы это запустить, создадим конфигурацию запуска аpp.js, ставим галочку в Single instance only для удобства перезапуска. Запускаем. Переходим в Chrome:

http://localhost:3000/

На этом порту наше приложение теперь что-то«слушает» , что-то работает.

Возвращаемся обратно в проект. Тут много всего сгенерировано, для того, чтоб нам было проще, оставим только то, что нам действительно необходимо, чтобы Express работал. Это не так много:

– подключить Express,
– создать приложение, 
это создает функцию, которая используется для того, чтобы обрабатывать запросы:

var express = require('express');
var app = express();

Далее добавляем http-сервер:

http.createServer(app).listen(app.get('port'), function(){
  console.log('Express server listening on port ' + app.get('port'));
});

Соответственно, Express будет обрабатывать все приходящие запросы. Нам еще понадобятся модули http.

var express = require('express');
var http = require('http');
var path = require('path');

var app = express();

http.createServer(app).listen(app.get('port'), function(){
  console.log('Express server listening on port ' + app.get('port'));
});

Aрp.get получает значение из специального скрытого свойства объекта арp, который устанавливается так (добавим в наш app.js):

app.set('port', 3000);

Все остальное мы пока закомментируем, оно нам не надо.

var express = require('express');
var http = require('http');
var path = require('path');

var app = express();
app.set('port', 3000);

http.createServer(app).listen(app.get('port'), function(){
  console.log('Express server listening on port ' + app.get('port'));
});

Теперь, если все это запустить, то получим сервер, который слушает на порту 3000, но ничего не делает. Почему? Да потому, что функция еxpress по умолчанию никак запросы не обрабатывает. Чтобы она их обрабатывала, ей нужно добавить специальный обработчик, который в терминологии Express называется Middleware. Он выглядит так же, как и обычная функция, принимает req и res, передает все объекты и может что-то сделать:

// Middleware  
app.use(function(req, res, next) {  
    res.end("Hello");  
});

Такая функция на все запросы будет отвечать одинаково. Запускаем. Проверяем. Работает!

Чем отличается Middleware от обычного обработчика on.request? Тем, что у него есть третий параметр  next. Он служит для того, чтобы объединять Middleware в цепочки. Например, есть один Middleware, а ниже делаем другой Middleware.  Первый из них проверяет, если

if (req.url == '/') {

то вызвать

} else {

А иначе  – передать управление дальше:

next();

Мы скоро продолжим, увидимся!  Код урока доступен по ссылке.

keep-calm-there-s-more-to-come-14
Материалы для статьи взяты из данного скринкаста.

We are looking forward to meeting you on our website soshace.com

Оценка задачи

В первую очередь хочу отметить, что все описанное ниже основано на реальном опыте работы и не является моими личными пожеланиями.

Чтобы правильно оценить задачу, проект нужно:

9. Уроки Node.js. События, EventEmitter и Утечки Памяти

Следующий объект, который нас интересует, это EventEmitter или, как его иногда называют, ЕЕ. EventEmitter представляет собой основной объект, реализующий работу с событиями в Node.js. Большое количество других встроенных объектов, которые генерируют события, ему наследуют. Для того чтобы воспользоваться EventEmitter достаточно подключить модуль “events”встроенный и взять с него соответствующее свойство (создадим ee.js) :

var EventEmitter = require(‘events’).EventEmitter;

7. Уроки Node.js. Модуль Console

А теперь поговорим о следующем встроенном модуле console. Как мы уже знаем , он использует util.format и util.inspect для вывода. Console в отличие от util является глобальной переменной. Это большая редкость в Node.js, но, действительно, сonsole не обязательно мы должны require. Она есть везде.

One Reply to “Уроки Express.js . Основы и Middleware. Часть 1.”

  1. Дмитрий Тулупов 6 years ago

    А уроки для какой версии express?

Leave a Reply