Я пытаюсь понять, как настроить 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-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
переданного с запросом.