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


Записаться на бесплатный урок