Перевод статьи подготовлен в преддверии старта курса 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
.