老师,你好,关于const { body } = ctx.request

来源:2-5 Koa开发RESTful接口,GET&POST获取数据及数据格式化方法【进阶篇】

qq_潇生落雨_0

2020-01-02 22:28:19

老师,你好,我按照你课程的写法去实践,遇到了一件不是很理解的事:

大致代码如下:

router.post('/post', (ctx, next) => {
const { body } = ctx.request
console.log(ctx.request);
console.log(body)
})

输出的对象如下:

{ method: 'POST',
  url: '/post',
  header:
   { 'content-type': 'application/json',
     'user-agent': 'PostmanRuntime/7.21.0',
     accept: '*/*',
     'cache-control': 'no-cache',
     'postman-token': 'd648b64b-506e-4ce0-a9c0-a747854960ed',
     host: 'localhost:3000',
     'accept-encoding': 'gzip, deflate',
     'content-length': '23',
     connection: 'keep-alive' } }

按照我的理解,ctx.request不是应该有body这个对象的吗?但是body确实可以输出我传入的参数

请问这个老师知道是为什么吗?

附完整代码

/* 写一个RESTful接口 */
const Koa = require('koa')
const Router = require('koa-router')
const cors = require('@koa/cors')
const koaBody = require('koa-body');

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

router.post('/post', (ctx, next) => {
const { body } = ctx.request
console.log(ctx.request);
})

app.use(koaBody());
app.use(cors());
app.use(router.routes())
.use(router.allowedMethods())
app.listen(3000)


写回答

3回答

Brian

2020-01-05

是不是post的时候没有传?

http://img.mukewang.com/climg/5e11c16c08d5b6dd16000768.jpg

0
hq_潇生落雨_0
h 嗯嗯,我其实有试过调试,图片在上面的回复中截图了。或者说我奇怪的点是,为什么调试里明明可以看到body,但是我输出到控制台时,没有看到这个body的属性
h020-01-06
共1条回复

qq_潇生落雨_0

提问者

2020-01-07

http://img.mukewang.com/climg/5e135f7509b7549315130621.jpg

0
hrian
回复
hq_潇生落雨_0
h const test = { ...ctx.request } console.log('TCL: LoginController -> login -> bod', test) 这么玩~,需要看看koa的源码去了,res.request上确实没有body,body是绑定在res上的.
h020-01-07
共2条回复

qq_潇生落雨_0

提问者

2020-01-06

不是的,我好奇的是为什么我使用命令行console.log出来的结果里面是没有body的(第一张图),但实际上body应该是存在的,我也试了一下,调试模式下确实是可以看到body(第二张图):调试的ctx.request以及左侧的调试界面变量里也看到了body的值。

http://img.mukewang.com/climg/5e1331520969090c00000000.jpg

http://img.mukewang.com/climg/5e1332f20991720318801007.jpg

0
hq_潇生落雨_0
回复
hrian
h 所以我就觉得好诡异,这个问题如果老师也没有遇到就算了,只是遇到了想看看老师有没有见过而已
h020-01-07
共4条回复

0 学习 · 1842 问题

查看课程