Модуль http для вашего Node.js-сервера — КиберПедия 

Архитектура электронного правительства: Единая архитектура – это методологический подход при создании системы управления государства, который строится...

Наброски и зарисовки растений, плодов, цветов: Освоить конструктивное построение структуры дерева через зарисовки отдельных деревьев, группы деревьев...

Модуль http для вашего Node.js-сервера

2020-11-19 199
Модуль http для вашего Node.js-сервера 0.00 из 5.00 0 оценок
Заказать работу

Когда вы начинаете создавать HTTP-приложения в Node.js, встроенные модули http/https - это то, с чем вы будете взаимодействовать.

Для запуска первого HTTP сервера необходимо подключить модуль http и привязать сервер к порту 3000.

Для запуска следующего примера необходимо, чтобы окружение было настроено. Как настроить актуальное окружение для вашей ОС вы можете найти на официальном сайте Node.js (https://nodejs.org/)

Создаем текстовый файл с именем и расширением index.js, затем добавляем в него следующий код.

// содежимое index.js

const http = require('http')

const port = 3000const requestHandler = (request, response) => {

console.log(request.url)

response.end('Hello Node.js Server!')

}const server = http.createServer(requestHandler)server.listen(port, (err) => {

if (err) {

   return console.log('something bad happened', err)

} console.log(`server is listening on ${port}`)

})

 

Запуск скрипта в консоли происходит вызовом следующей команды:

$ node index.js

Что нужно здесь отметить:

requestHandler: эта функция будет вызываться каждый раз, когда на сервер придёт запрос. Если вы откроете в своём браузере адрес localhost:3000, два сообщения появятся в консоли: одно для / и одно для favicon.ico.

if (err): обработка ошибок: если порт уже занят или есть какие-то другие причины, по которым сервер не может быть запущен, мы получим уведомление об этом.

Модуль http крайне низкоуровневый: создание сложного веб-приложения с использованием вышеприведенного фрагмента кода очень трудоемко. Именно по этой причине обычно выбирают фреймворки для работы над проектами, построенных на Node.js. Самые популярные из них:

express

hapi

koa

restify

В рамках данной лабораторной работы будем использовать Express, так как именно для можно найти множество модулей в NPM.

Express

Быстрый, гибкий, минималистичный веб-фреймворк для Node.js — http://expressjs.com/

Добавление Express в проект — это просто установка через NPM:

$ npm install express --save

После того, как Express установлен, создадим приложение аналогичное тому, что написано ранее:

const express = require('express')

const app = express()

const port = 3000app.get(‘/’, (request, response) => {

response.send('Hello from Express!')

})app.listen(port, (err) => {

if (err) {

   return console.log('something bad happened', err)

} console.log(`server is listening on ${port}`)

})

Самое большое различие, которое можно заметить, заключается в том, что Express по умолчанию даёт вам роутер. Нет необходимости вручную разбирать URL, чтобы решить, что делать, вместо этого определяется маршрутизация приложения с помощью app.get, app.post, app.put и так далее, а они уже транслируются в соответствующие HTTP-запросы.

Одна из самых мощных концепций, которую реализует Express — это паттерн Middleware.

Middleware — промежуточный обработчик

Его можно представить, как о конвейер Unix, но для HTTP-запросов.

На диаграмме можно увидеть, как запрос идёт через условное Express-приложение. Он проходит через три промежуточных обработчика. Каждый обработчик может изменить этот запрос, а затем, основываясь на бизнес-логике, третий middleware отправит ответ, либо запрос попадёт в обработчик соответствующего роута.

На это можно реализовать следующим образом:

const express = require('express')

const app = express()app.use((request, response, next) => {

console.log(request.headers)

next()

})app.use((request, response, next) => {

request.chance = Math.random()

next()

})app.get('/', (request, response) => {

response.json({

   chance: request.chance

})

})app.listen(3000)

Следует отметить:

1. app.use: это то, как можно описать middleware. Этот метод принимает функцию с тремя параметрами, первый из которых является запросом, второй — ответом, а третий — коллбеком next. Вызов next сигнализирует Express о том, что он может переходить к следующему промежуточному обработчику.

2. Первый промежуточный обработчик только логирует заголовки и мгновенно вызывает следующий.

3. Второй добавляет дополнительное свойство к запросу — это одна из самых мощных функций шаблона middleware. Промежуточные обработчики могут добавлять дополнительные данные к объекту запроса, который могут считывать/изменять middleware, расположенные ниже.

Обработка ошибок

Как и во всех фреймворках, правильная обработка ошибок имеет решающее значение. Для их использования Express необходимо создать специальный промежуточный обработчик — middleware с четырьмя входными параметрами:

const express = require(‘express’)

const app = express()app.get(‘/’, (request, response) => {

throw new Error(‘oops’)

})app.use((err, request, response, next) => {

// логирование ошибки, пока просто console.log

console.log(err)

response.status(500).send(‘Something broke!’)

})app.listen(3000)

Следует отметить:

1. Обработчик ошибок должен быть последней функцией, добавленной с помощью app.use.

2. Обработчик ошибок принимает коллбек next. Он может использоваться для объединения нескольких обработчиков ошибок.

Рендеринг HTML

Для отправки HTML ответов воспользуемся пакетом handlebars с обёрткой express-handlebars.

Сначала необходимо создать следующую структуру каталогов:

├── index.js

└── views

├── home.hbs

└── layouts

   └── main.hbs

После этого необходимо заполнить файл index.js следующим кодом:

// index.js

const path = require('path')

const express = require('express')

const exphbs = require('express-handlebars')

const app = express()app.engine('.hbs', exphbs({

defaultLayout: 'main',

extname: '.hbs',

layoutsDir: path.join(__dirname, 'views/layouts')

}))

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

app.set('views', path.join(__dirname, 'views'))

app.listen(3000)

Приведенный выше код инициализирует движок handlebars и устанавливает каталог шаблонов в views/layouts. Это каталог, в котором будут храниться шаблоны.

После того, как сделана эта настройка, можно поместить свой начальный html в main.hbs. Это показано в коде ниже:

<html>

<head>

   <title>Express handlebars</title>

</head>

<body>

   {{{body}}}

</body>

</html>

При необходимости можно заметить метку {{{body}}} — здесь будет размещен контент. Давайте создадим home.hbs!

<h2>Hello {{name}}</h2>

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

app.get('/', (request, response) => {

response.render('home', {

   name: 'John'

})

})

Метод render принимает два параметра:

1. Первый — это имя шаблона.

2. Второй — данные, необходимые для рендеринга.

Как только сделан запрос по этому адресу, приходит ответ, похожий на этот:

<html>

<head>

   <title>Express handlebars</title>

</head>

<body>

   <h2>Hello John</h2>

</body>

</html>

Чтобы узнать, как добавить больше шаблонов (и даже частичных), обратитесь к официальной документации express-handlebars.

Отладка Express

В некоторых случаях вам может потребоваться выяснить, что происходит с Express, когда приложение работает. Для этого возможно передать следующую переменную окружения в Express: DEBUG=express*.

Для этого необходимо запустить Node.js HTTP-сервер, используя:

$ DEBUG=express* node index.js


Поделиться с друзьями:

Таксономические единицы (категории) растений: Каждая система классификации состоит из определённых соподчиненных друг другу...

Семя – орган полового размножения и расселения растений: наружи у семян имеется плотный покров – кожура...

Состав сооружений: решетки и песколовки: Решетки – это первое устройство в схеме очистных сооружений. Они представляют...

Биохимия спиртового брожения: Основу технологии получения пива составляет спиртовое брожение, - при котором сахар превращается...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.026 с.