Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/458.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript koa2使用带有简单GET的koa bodyparser_Javascript_Node.js_Koa - Fatal编程技术网

Javascript koa2使用带有简单GET的koa bodyparser

Javascript koa2使用带有简单GET的koa bodyparser,javascript,node.js,koa,Javascript,Node.js,Koa,我试图理解如何使用一个简单的GET配置koa bodyparser。如果包含或不包含解析器,则以下返回完全相同的正文: 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());

我试图理解如何使用一个简单的
GET
配置koa bodyparser。如果包含或不包含解析器,则以下返回完全相同的正文:

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'));
政府说:

我不确定是否正确解析了:

ctx.body = ctx.request.body = users;

koabodyparser
解析请求主体,而不是响应主体。在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;
  });
您需要在post请求中使用Postman或
curl
传递有效的JSON,如下所示:

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
KoaBodyParser
不仅仅是这样,因为它在文档中统计,它根据请求传递的
内容类型
头来处理JSON、表单和文本体。

感谢您的响应。我有一个总大脑*=3,我脑子里想我是出于某种原因在使用express res.json()。
curl -X POST \
  http://localhost:3000/api \
  -H 'Content-Type: application/json' \
  -d '{
    "firstName": "Zaphod",
    "lastName": "Beeblebrox"
  }'