Node.js Фреймворк Express
Введение в Express
Express — это лаконичный и гибкий фреймворк для веб-приложений на Node.js, который предоставляет ряд мощных возможностей, помогающих создавать различные веб-приложения, а также богатый набор инструментов HTTP.
С Express вы можете быстро создать полнофункциональный веб-сайт.
Основные возможности фреймворка Express:
Вы можете настроить промежуточное ПО для ответа на HTTP-запросы.
Определяется таблица маршрутизации для выполнения различных действий при HTTP-запросах.
Вы можете динамически отображать HTML-страницы, передавая параметры в шаблоны.
Установка Express
Установите Express и сохраните его в списке зависимостей:
$ cnpm install express --save
Приведённая выше команда установит фреймворк Express вnode_modulesкаталоге текущего каталога,node_modulesКаталог express будет автоматически создан в этом каталоге. Следующие важные модули необходимо установить вместе с фреймворком Express:
body-parser- промежуточное ПО Node.js для обработки данных JSON, Raw, Text и URL-encoded.
cookie-parser- это инструмент для разбора cookies. Вы можете получить входящие cookies через req.cookies и преобразовать их в объекты.
multer- промежуточное ПО Node.js для обработки данных формы с enctype="multipart/form-data" (задаёт MIME-кодировку формы).
$ cnpm install body-parser --save $ cnpm install cookie-parser --save $ cnpm install multer --save
После установки мы можем проверить номер используемой версии express:
$ cnpm list express /data/www/node └── [email protected] -> /Users/tianqixin/www/node/node_modules/.4.15.2@express
Первый пример фреймворка Express
Далее мы используем фреймворк Express, чтобы вывести "Hello World".
В следующем примере мы подключаем модуль express и отвечаем строкой "Hello World" после того, как клиент сделает запрос.
Создайте файл express_demo.js со следующим кодом:
Код файла express_demo.js:
Выполните приведённый выше код:
$ node express_demo.js 应用实例,访问地址为 http://0.0.0.0:8081
Перейдите по адресу http://127.0.0.1:8081 в браузере, результат показан на рисунке ниже:

Запрос и ответ
Приложения Express используют параметры функций обратного вызова:requestиresponseобъекты для обработки данных запроса и ответа.
app.get('/', function (req, res) {
// --
})
requestиresponseПодробное описание объектов:
Объект запроса- Объект запроса представляет HTTP-запрос и содержит такие свойства, как строка запроса, параметры, содержимое и HTTP-заголовки. Общие свойства включают:
- req.app: Если callback — внешний файл, используйте req.app для доступа к экземпляру express
- req.baseUrl: Получает URL-путь, по которому в данный момент смонтирован маршрут
- req.body / req.cookies: Получает «тело запроса» / куки
- req.fresh / req.stale: Определяет, является ли запрос всё ещё «свежим»
- req.hostname / req.ip: Получает имя хоста и IP-адрес
- req.originalUrl: Получает исходный URL запроса
- req.params: Получает параметры маршрута
- req.path: Получает путь запроса
- req.protocol: Получает тип протокола
- req.query: Получает строку параметров запроса URL
- req.route: Получает текущий сопоставленный маршрут
- req.subdomains: Получает поддомены
- req.accepts(): Проверяет допустимые типы документов для запроса
- req.acceptsCharsets / req.acceptsEncodings / req.acceptsLanguages: Возвращает первую допустимую кодировку символов из указанных наборов символов
- req.get(): Получает указанный заголовок HTTP-запроса
- req.is(): Определяет MIME-тип заголовка Content-Type запроса
Объект ответа— объект response представляет HTTP-ответ, т. е. данные HTTP-ответа, отправляемые клиенту при получении запроса. Общие свойства включают:
- res.app: То же, что и req.app
- res.append(): Добавляет указанный HTTP-заголовок
- res.set() сбросит ранее установленные заголовки после res.append()
- res.cookie(name, value [, option]): Устанавливает Cookie
- опции: domain / expires / httpOnly / maxAge / path / secure / signed
- res.clearCookie(): Очищает Cookie
- res.download(): Передаёт файл по указанному пути
- res.get(): возвращает указанный HTTP-заголовок
- res.json(): отправляет ответ JSON
- res.jsonp(): отправляет ответ JSONP
- res.location(): устанавливает только HTTP-заголовок Location ответа, не устанавливая код состояния и не закрывая ответ.
- res.redirect(): устанавливает HTTP-заголовок Location ответа и код состояния 302
- res.render(view, [locals], callback): рендерит представление и передаёт отрендеренную строку в callback. Если во время рендеринга возникает ошибка, автоматически вызывается next(err). В callback будут переданы возможная ошибка и отрендеренная страница, поэтому автоматического вывода не будет.
- res.send(): отправляет HTTP-ответ
- res.sendFile(path [, options] [, fn]): передаёт файл по указанному пути - Автоматически устанавливает Content-Type на основе расширения файла
- res.set(): устанавливает HTTP-заголовки; можно установить несколько заголовков сразу, передав объект
- res.status(): устанавливает HTTP-код состояния
- res.type(): устанавливает MIME-тип для Content-Type
Маршрутизация
Мы уже изучили основы применения HTTP-запросов, а маршрутизация определяет, кто (указанный скрипт) отвечает на клиентские запросы.
В HTTP-запросах мы можем извлекать запрошенный URL и параметры GET/POST с помощью маршрутизации.
Далее мы расширяем Hello World, добавляя некоторые возможности для обработки большего числа типов HTTP-запросов.
Создайте файл express_demo2.js со следующим кодом:
Код файла express_demo2.js:
Выполните приведённый выше код:
$ node express_demo2.js 应用实例,访问地址为 http://0.0.0.0:8081
Затем можно попробовать обратиться по разным адресам, например http://127.0.0.1:8081, чтобы увидеть результат.
Откройте http://127.0.0.1:8081/list_user в браузере, результат показан на рисунке ниже:
Откройте http://127.0.0.1:8081/abcd в браузере, результат показан на рисунке ниже:
Откройте http://127.0.0.1:8081/abcdefg в браузере, результат показан на рисунке ниже:
Статические файлы
Express предоставляет встроенное промежуточное ПО express.static для настройки статических файлов, таких как изображения, CSS, JavaScript и т. д.
Вы можете использовать express.static в качестве промежуточного ПО для настройки пути к статическим файлам. Например, если вы поместите изображения, файлы CSS и JavaScript в каталог public, вы можете написать:
app.use('/public', express.static('public'));
Мы можем поместить некоторые изображения в каталог public/images, как показано ниже:
node_modules server.js public/ public/images public/images/logo.png
Давайте снова изменим приложение "Hello World", чтобы добавить возможность обработки статических файлов.
Создайте файл express_demo3.js, код выглядит следующим образом:
Код файла express_demo3.js:
Выполните приведённый выше код:
$ node express_demo3.js 应用实例,访问地址为 http://0.0.0.0:8081
Выполните приведённый выше код:
Откройте http://127.0.0.1:8081/public/images/logo.png в браузере (в этом примере используется логотип Example tutorial), результат показан на рисунке ниже:
Метод GET
В следующем примере демонстрируется отправка двух параметров методом GET в форме. Мы можем использоватьprocess_getроутер для обработки ввода:
Код файла index.html:
Код файла server.js:
Выполните приведённый выше код:
node server.js 应用实例,访问地址为 http://0.0.0.0:8081
Откройте http://127.0.0.1:8081/index.html в браузере, как показано на рисунке:
Теперь вы можете ввести данные в форму и отправить её, как показано ниже:
Метод POST
В следующем примере демонстрируется отправка двух параметров через форму методом POST. Мы можем использоватьprocess_postrouter для обработки ввода:
Код файла index.html:
Код файла server.js:
Выполните приведённый выше код:
$ node server.js 应用实例,访问地址为 http://0.0.0.0:8081
Откройте http://127.0.0.1:8081/index.html в браузере, как показано на рисунке:
Теперь вы можете ввести данные в форму и отправить её, как показано ниже:
Загрузка файла
Ниже мы создаём форму для загрузки файлов, используя метод POST, с атрибутом enctype формы, установленным в multipart/form-data.
Код файла index.html:
Код файла server.js:
Выполните приведённый выше код:
$ node server.js 应用实例,访问地址为 http://0.0.0.0:8081
Откройте http://127.0.0.1:8081/index.html в браузере, как показано на рисунке:
Теперь вы можете ввести данные в форму и отправить её, как показано ниже:
Управление cookie
Мы можем использовать промежуточное ПО для отправки информации о cookie на сервер Node.js. Следующий код выводит информацию о cookie, отправленную клиентом:
Код файла express_cookie.js:
Выполните приведённый выше код:
$ node express_cookie.js
Теперь вы можете получить доступ к http://127.0.0.1:8081 и просмотреть вывод терминала, как показано ниже:
Связанные материалы
- Официальный сайт Express:http://expressjs.com/
- Китайская версия Express 4.x API:Китайская версия Express4.x API
- Express4.x API:http://expressjs.com/zh-cn/4x/api.html