Экспресс


Начало работы

Hello World

  • “Создать проект, добавить конфигурацию package.json ``bash $ mkdir myapp # создать каталог $ cd myapp # войти в каталог $ npm init -y # Инициализация конфигурации

  • Установка зависимостей ``bash $ npm install express

  • Добавляем код в файл index.js:

    const express = require('express')
    const app = express()
    const port = 3000
    app.get('/', (req, res) => {
      res. send('Hello World!')
    })
    app.listen(port, () => {
      console.log(`Прослушивание порта на ${порт}`)
    })
    
  • Запустите приложение с помощью следующей команды ``bash $ node index.js

{.marker-timeline}

express -h

``bash Использование: express [options] [dir] Опции: -h, –help вывод информации об использовании –version вывод номера версии -e, –ejs добавить поддержку движка ejs –hbs добавить поддержку движка hbs –pug добавить поддержку движка pug -H, –hogan Добавить поддержку движка hogan.js –no-view Не генерируется движок представления -v, –view добавить поддержку <движка> представления (ejs|hbs|hjs|jade|pug|twig|vash) (по умолчанию jade) -c, –css добавить поддержку таблицы стилей (less|stylus|compass|sass) (по умолчанию css) –git добавить .gitignore -f, –force принудительное использование непустых каталогов

{.wrap-text}

Создание проекта `myapp`

``bash
$ express --view=pug myapp
# запустить приложение
$ DEBUG=myapp:*npm start

express()

:- :-
express.json() #
express.raw() #
express.Router() #
express.static() #
express.text() #
express.urlencoded() #

Router

:- :-
router.all() #
router.METHOD() #
router.param() #
router.route() #
router.use() #

Приложение

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

console.dir(app.locals.title)
//=> 'My App'
console.dir(app.locals.email)
//=> '[email protected]'

Атрибут

:- :-
app.locals Локальные переменные в приложении #
app.mountpath Шаблон пути для монтирования субприложений #

События

:- :-
mount Дочернее приложение монтируется на родительское приложение, и событие срабатывает на дочернем приложении #

Метод

:- :-
app.all() #
app.delete() #
app.disable() #
app.disabled() #
app.enable() #
app.enabled() #
app.engine() #
app.get(name) #
app.get(path, callback) #
app.listen() #
app.METHOD() #
app.param() #
app.path() #
app.post() #
app.put() #
app.render() #
app.route() #
app.set() #
app.use() #

Запрос

Атрибут

:- :-
req.app #
req.baseUrl #
req.body #
req.cookies #
req.fresh #
req.hostname #
req.ip #
req.ips #
req.method #
req.originalUrl #
req.params #
req.path #
req.protocol #
req.query #
req.route #
req.secure #
req.signedCookies #
req.stale #
req.subdomains #
req.xhr #

Метод

:- :-
req.accepts() #
req.acceptsCharsets() #
req.acceptsEncodings() #
req.acceptsLanguages() #
req.get() Получение полей заголовка HTTP-запроса #
req.is() #
req.param() #
req.range() #

Response

app.get('/', function (req, res) {
  console.dir(res.headersSent) //false
  res.send('OK')
console.dir(res.headersSent) //true
})

Атрибут

:- :-
res.app #
res.headersSent #
res.locals #

Метод

:- :-
res.append() #
res.attachment() #
res.cookie() #
res.clearCookie() #
res.download() Запрос на скачивание файлов #
res.end() Завершение процесса ответа #
res.format() #
res.get() #
res.json() Отправить JSON-ответ #
res.jsonp() Отправить ответ с поддержкой JSONP #
res.links() #
res.location() #
res.redirect() Перенаправление запроса #
res.render() Рендеринг шаблона представления #
res.send() Отправка различных типов ответов #
res.sendFile() Отправка файла в виде октетного потока #
res.sendStatus() #
res.set() #
res.status() #
res.type() #
res.vary() #

Пример

Маршрутизатор {. row-span-2}

Вызывается для любого запроса, переданного этому маршрутизатору

router. use(function (req, res, next) {
  //... здесь есть некоторая логика... как и в любом другом промежуточном ПО
  next()
})

будет обрабатывать любой запрос, заканчивающийся на /events.

//зависит от того, где маршрутизатор "использует()"
router. get('/events', (req, res, next) => {
  //..
})

Ответ

Объект res представляет собой HTTP-ответ, отправляемый приложением Express при получении HTTP-запроса

app.get('/user/:id', (req, res) => {
  res.send('user' + req.params.id)
})

Запрос

Объект req представляет собой HTTP запрос и имеет свойства для строки запроса, параметров, тела запроса, HTTP-заголовков и т.д.

app.get('/user/:id', (req, res) => {
  res.send('user' + req.params.id)
})

res. end()

res. end()
res.status(404).end()

Завершение процесса получения ответа. Этот метод фактически пришел из ядра Node, а именно из метода response.end() функции http.ServerResponse.

res.json([body])

res.json(null)
res.json({ user: 'tobi' })
res.status(500).json({ error: 'message' })

app.all

app.all('/secret', function (req, res, next) {
  console.log('доступ к секретному разделу...')
  next() // Передаем управление следующему обработчику
})

app.delete

app.delete('/', function (req, res) {
  res.send('DELETE запрос на главную страницу')
})

app.disable(name)

app.disable('trust proxy')
app.get('trust proxy')
// => false

app.disabled(name)

app.disabled('trust proxy')
// => true

app.enable('trust proxy')
app.disabled('trust proxy')
// => false

app.engine(ext, callback)

var engines = require('consolidate')

app.engine('haml', engines.haml)
app.engine('html', engines.hogan)

app.listen([port[, host[, backlog]]][, callback])

var express = require('express')

var app = express()
app.listen(3000)

Маршрутизация

const express = require('express')
const app = express()

//Ответ на запрос "hello world" при выполнении GET-запроса к домашней странице
app.get('/', (req, res) => {
  res.send('hello world')
})
// Маршрутизация метода GET
app.get('/', (req, res) => {
  res.send('GET-запрос на главную страницу')
})

// Маршрутизация методом POST
app.post('/', (req, res) => {
  res.send('POST-запрос на главную страницу')
})

Middleware

function logOriginalUrl (req, res, next) {
  console.log('ReqURL:', req.originalUrl)
  next()
}

function logMethod (req, res, next) {
  console.log('Тип запроса:', req.method)
  next()
}

const log = [logOriginalUrl, logMethod]

app.get('/user/:id', log,
  (req, res, next)=>{
    res.send('Информация о пользователе')
  }
)

Использование шаблонов

app.set('view engine', 'pug')

Создайте файл шаблона Pug с именем index.pug в каталоге views со следующим содержимым

html
  заголовок
    заголовок= title
  тело
    h1=сообщение

Создайте маршрут для рендеринга файла index.pug. Если свойство view engine не задано, то необходимо указать расширение файла представления

app.get('/', (req, res) => {
  res. render('index', {
    title: 'Привет', message: 'Hello there!'
  })
})