Перевод статьи подготовлен в преддверии старта курса Node.js Developer.
Koa - это небольшой фреймворк, позволяющий создавать
бэкэнд-приложения, работающие на платформе
Node.js
.
В этой статье мы рассмотрим, как отправлять различные типы ответов с помощью Koa.
Отправка тела (Body)
Для отправки тела ответа можно установить атрибут тела
ctx
. Например, мы можем отправить тело ответа
следующим образом:
const Koa = require('koa');const app = new Koa();app.use(async (ctx, next) => { ctx.body = 'foo';});app.listen(3000);
В приведенном выше коде мы устанавливаем свойство
ctx.body
в 'foo' . Таким образом, это то, что мы
получим, когда перейдем по адресу /
с помощью нашего
браузера или сделаем запрос на него с помощью HTTP-клиента.
Заголовок (Header) отправки ответа
Мы можем отправлять ответы в нашем коде Koa, установив свойство
ctx.response
.
Для установки заголовка мы можем установить заголовок ответа
методом ctx.set
.
Например, мы можем использовать его следующим образом:
const app = new Koa();app.use(async (ctx, next) => { ctx.set('Access-Control-Allow-Origin', '*'); ctx.set('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content-Type, Accept'); ctx.set('Access-Control-Allow-Methods', 'POST, GET, PUT, DELETE, OPTIONS'); ctx.body = 'hello';});app.listen(3000);
В вышеприведенном коде мы вызываем ctx.set
для
установки различных заголовков, включая заголовоки:
Access-Control-Allow-Origin
,
Access-Control-Allow-Headers
и
Access-Control-Allow-Methods
.
Как только мы сделаем запрос по адресу /
, мы
увидим эти заголовки в HTTP клиентах, таких как Chrome или
Postman.
Код статуса ответа на отправку
Мы можем посылать коды статуса ответа, установив значение кода
статуса в свойство respondbse.status
.
Например, это можно сделать следующим образом:
const Koa = require('koa');const app = new Koa();app.use(async (ctx, next) => { ctx.status = 202; ctx.body = 'accepted';});app.listen(3000);
В коде выше мы установили значение ctx.status 's равным 202. Таким образом, когда мы сделаем запрос по адресу / , мы получим код состояния 202 из запроса.
Некоторые распространенные коды ответа, которые отправляются, включают в себя:
200 - OK
201 - created - создан
202 - accepted - принято
203 - non-authoritative information- неавторитетная
информация
204 - no content- нет содержания
301 - moved permanently - перемещено навсегда
302 - found - найдено
303 - see other - см. прочее
307 - temporary redirect - временная
переадресация
308 - permanent redirect - постоянная
переадресация
400 - bad request - неверный запрос
401 - unauthorized - не аутентифицированный
запрос
403 - forbidden- неавторизованный запрос
404 - not found - не найдено
405 - method not allowed- способ не разрешён
406 - not acceptable- неприемлемо
422 - unprocessable entity - необрабатываемая
сущность
500 - internal server error- внутреннего ошибка
сервера
501 - not implemented- не реализован
502 - bad gateway- неверный шлюз
504 - gateway timeout- таймаут шлюза
Отправка заголовков (Headers)
Мы можем установить свойство
ctx.response.lastModified
на нужную нам дату.
Например, мы можем установить его следующим образом:
const Koa = require('koa');const app = new Koa();app.use(async (ctx, next) => { ctx.response.lastModified = new Date(2020, 0, 1); ctx.body = 'foo';});app.listen(3000);
В приведенном выше коде мы устанавливаем свойство
lastModified
на 1 января 2020 года, поэтому, когда мы
сделаем запрос по адресу /
, мы получим
Last-Modified
из ответа со значением Wed, 01
января 2020 года 00:00:00 GMT
.
Мы можем установить заголовок Content-Type, задав свойство
ctx.type
. Например, это можно сделать следующим
образом:
const Koa = require('koa');const app = new Koa();app.use(async (ctx, next) => { ctx.type = 'text/plain; charset=utf-8'; ctx.body = 'foo';});app.listen(3000);
В приведенном выше коде мы имеем следующую строчку:
ctx.type = 'text/plain; charset=utf-8';
Чтобы установить заголовок Content-Type в 'text/plain;
charset=utf-8'
. Затем мы увидим это в качестве значения
заголовка Content-Type при выполнении запроса по адресу
/
.
Чтобы добавить еще один заголовок к ответу, мы можем вызвать
метод ctx.append()
для добавления новых заголовков. Он
принимает ключ и значение в качестве своих 2 аргументов.
Например, мы можем использовать его следующим образом:
const Koa = require('koa');const app = new Koa();app.use(async (ctx, next) => { ctx.append('a', 1); ctx.body = 'foo';});app.listen(3000);
В приведенном выше коде мы вызвали метод
ctx.append()
с ключом заголовка 'a'
и
соответствующим ему значением 1.
Затем, когда мы сделаем запрос по адресу /
, то
получим заголовок ответа A со значением 1.
Заключение
Мы можем установить заголовки ответов, вызвав метод
ctx.append()
. Чтобы вернуть тело ответа, мы можем
установить свойство ctx.body
со значением.
Для установки кода статуса ответа, мы устанавливаем свойство
ctx.status
.