请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

使用postman请求/api/post-data接口时没有返回前面设置的req.body

app.post('/api/post-data', (req, res, next) => {
    console.log('post api/post-data路由')
    console.log(req.body)
    res.json({
        errno: 0,
        data: req.body
    })
})

使用postman请求这个接口时没有返回前面设置的req.body,加了打印前面设置的那个也执行了,这里打印输出undefined。不知道是什么原因

正在回答 回答被采纳积分+3

3回答

提问者 慕雪5269978 2019-12-25 10:56:34
const express = require('express')

// http请求实例
const app = express()

// app.use((req, res, next) => {
//     console.log('请求开始...', req.method, req.url)
//     next()
// })

app.use((req, res, next) => {
    console.log('sss')
    setTimeout(() => {
        console.log('aaa')
        req.body = {
            a: 100,
            b: 200
        }
    })
    next()
})

app.post('/api/post-data', (req, res, next) => {
    console.log('post api/post-data路由')
    console.log(req.body)
    res.json({
        errno: 0,
        data: req.body
    })
})


app.use((req, res, next) => {
    console.log('处理404')
    res.json({
        errno: -1,
        msg: '404 not find'
    })
})

app.listen(3000, () => {
    console.log('server is running on port 3000')
})

老师,输出还是不对,终端打印信息如下:

server is running on port 3000
sss
post api/post-data路由
undefined
aaa


0 回复 有任何疑惑可以回复我~
  • 双越 #1
    把调用 next() 放在 setTimeout 里面,试试。
    回复 有任何疑惑可以回复我~ 2019-12-25 19:15:34
  • 提问者 慕雪5269978 #2
    嗯,刚好昨晚看了JS的事件循环机制,可以解释的通为什么结果不对了,应该按照老是说的放里头就可以了
    回复 有任何疑惑可以回复我~ 2019-12-26 09:50:39
  • 提问者 慕雪5269978 回复 双越 #3
    可以了,也知道为什么结果不对了,谢谢老师
    回复 有任何疑惑可以回复我~ 2019-12-26 09:52:38
提问者 慕雪5269978 2019-12-25 09:10:00

前面设置req.body使用的是setTimeout来模拟异步处理,添加打印信息发现控制台打印的消息设置req.body是在/api/post-data这个接口处理完之后设置的值。不明白视频里setTimeout函数也没设置延迟时间但是为何会在之后,如果不使用setTimeout函数直接设置值请求接口则返回的是和视频里结果一样的


0 回复 有任何疑惑可以回复我~
  • 双越 #1
    建议你单独这一个问题,写一个简单的 demo 来验证。项目环境比较复杂,要排期其他因素的干扰。你写一个简单的 demo ,就为了验证这一个问题,如果再有问题,可以把 demo 代码发给我。简洁的代码也好排查问题。
    回复 有任何疑惑可以回复我~ 2019-12-25 10:32:08
  • 提问者 慕雪5269978 回复 双越 #2
    好的,了解了
    回复 有任何疑惑可以回复我~ 2019-12-25 10:50:19
双越 2019-12-24 21:43:10

postman 返回的是什么?截图看下。

0 回复 有任何疑惑可以回复我~
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信