Архитектура электронного правительства: Единая архитектура – это методологический подход при создании системы управления государства, который строится...
Наброски и зарисовки растений, плодов, цветов: Освоить конструктивное построение структуры дерева через зарисовки отдельных деревьев, группы деревьев...
Топ:
Комплексной системы оценки состояния охраны труда на производственном объекте (КСОТ-П): Цели и задачи Комплексной системы оценки состояния охраны труда и определению факторов рисков по охране труда...
Эволюция кровеносной системы позвоночных животных: Биологическая эволюция – необратимый процесс исторического развития живой природы...
Оценка эффективности инструментов коммуникационной политики: Внешние коммуникации - обмен информацией между организацией и её внешней средой...
Интересное:
Что нужно делать при лейкемии: Прежде всего, необходимо выяснить, не страдаете ли вы каким-либо душевным недугом...
Распространение рака на другие отдаленные от желудка органы: Характерных симптомов рака желудка не существует. Выраженные симптомы появляются, когда опухоль...
Мероприятия для защиты от морозного пучения грунтов: Инженерная защита от морозного (криогенного) пучения грунтов необходима для легких малоэтажных зданий и других сооружений...
Дисциплины:
2020-11-19 | 199 |
5.00
из
|
Заказать работу |
|
|
Когда вы начинаете создавать 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 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!