koa2 используя koa-bodyparser с простым GET

1

Я пытаюсь понять, как настроить koa-bodyparser с помощью простого GET. Следующее возвращает точно такое же тело, если я включаю синтаксический анализатор или нет:

const Koa = require('koa');
const Router = require('koa-router');
const bodyParser = require('koa-bodyparser');

const app = new Koa();
const router = new Router();

app.use(bodyParser());

var users = [{
  id: 1,
  firstName: 'John',
  lastName: 'Doe'
}, {
  id: 2,
  firstName: 'Jane',
  lastName: 'Doe'
}];

router
    .get('/api', async (ctx, next) => {
    console.log('Getting users from /api');
    ctx.body = ctx.request.body = users;
});

app.use(router.routes());

app.listen(3000, () => console.log('Koa app listening on 3000'));

В документации говорится:

// the parsed body will store in ctx.request.body
// if nothing was parsed, body will be an empty object {}
ctx.body = ctx.request.body;

Я не уверен, правильно ли разбираюсь с:

ctx.body = ctx.request.body = users;
Теги:
koa

1 ответ

2
Лучший ответ

koa-bodyparser анализирует тело запроса, а не тело ответа. В запросе GET вы обычно не получаете тело с запросом. Чтобы вернуть тело JSON вызывающему абоненту, все, что вам нужно сделать, как вы отметили, это

router
  .get('/api', async ctx => {
    console.log('Getting users from /api');
    ctx.body = users;
  });

Если вы хотите увидеть синтаксический анализ в действии, вам понадобятся PUT, POST, PATCH и т.д.

router
  .post('/api', async ctx => {
    console.log('creating user for /api');
    const user = ctx.request.body;
    // creation logic goes here
    // raw input can be accessed from ctx.request.rawBody
    ctx.status = 201;
  });

Вам нужно будет передать действительный JSON в почтовом запросе с помощью Postman или curl следующим образом:

curl -X POST \
  http://localhost:3000/api \
  -H 'Content-Type: application/json' \
  -d '{
    "firstName": "Zaphod",
    "lastName": "Beeblebrox"
  }'

Вы увидите, что значение ctx.request.body имеет значение JSON, а ctx.request.rawBody имеет строковое значение '{"firstName":"Zaphod","lastName":"Beeblebrox"}'. Что это вы покупаете? В этом случае это избавит вас от необходимости называть JSON.parse(ctx.request.body) чтобы получить действительный JSON. koa-bodyparser - это нечто большее, чем просто, хотя, как он описывает в документах, он обрабатывает тела JSON, Form и Text на основе заголовка Content-Type переданного с запросом.

  • 0
    Спасибо за ответ. У меня был полный мозг * = 3 В моей голове почему-то возникла проблема с выражением res.json ().

Ещё вопросы

Сообщество Overcoder
Наверх
Меню