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

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

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

大致代码如下:

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

输出的对象如下:

1
2
3
4
5
6
7
8
9
10
11
12
{ 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确实可以输出我传入的参数

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

附完整代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
/* 写一个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回答

是不是post的时候没有传?

http://img1.sycdn.imooc.com//climg/5e11c16c08d5b6dd16000768.jpg

  • qq_潇生落雨_0 提问者 #1
    嗯嗯,我其实有试过调试,图片在上面的回复中截图了。或者说我奇怪的点是,为什么调试里明明可以看到body,但是我输出到控制台时,没有看到这个body的属性
    2020-01-06 21:18:34
提问者 qq_潇生落雨_0 2020-01-07 00:25:30
  • 提问者 qq_潇生落雨_0 #1
    所以我就觉得好诡异
    2020-01-07 00:26:07
  • Brian 回复 提问者 qq_潇生落雨_0 #2
    const test = { ...ctx.request } console.log('TCL: LoginController -> login -> bod', test) 这么玩~,需要看看koa的源码去了,res.request上确实没有body,body是绑定在res上的.
    2020-01-07 18:58:26
提问者 qq_潇生落雨_0 2020-01-06 21:16:44

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

http://img1.sycdn.imooc.com//climg/5e1331520969090c00000000.jpg

http://img1.sycdn.imooc.com//climg/5e1332f20991720318801007.jpg

  • Brian #1
    你试试JSON.stringfy(res.request)
    2020-01-06 23:39:11
  • Brian #2
    这样试试?JSON.stringfy(ctx.request)
    2020-01-06 23:39:53
  • 提问者 qq_潇生落雨_0 回复 Brian #3
    { "method": "POST", "url": "/api/post", "header": { "content-type": "application/json", "user-agent": "PostmanRuntime/7.21.0", "accept": "*/*", "cache-control": "no-cache", "postman-token": "1c158bfb-57e6-4883-96d6-5e6b82489ab3", "host": "localhost:3000", "accept-encoding": "gzip, deflate", "content-length": "23", "connection": "keep-alive" } }
    2020-01-07 00:24:51
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师
插入代码