【问题标题】:req.body undefined with expressreq.body 用 express 未定义
【发布时间】:2022-02-03 05:02:36
【问题描述】:

我在我的发布请求中得到了一个未定义的 req.body,尝试了所有方法,从 body-parser 到 express.json,两者都在一起(肯定不好),但仍然无法让它工作。非常感谢任何帮助!

我已将我的 nodejs 服务器减少到最低限度:

const app = express();
const bodyParser = require('body-parser');

app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());

app.use(express.urlencoded({ extended: false }));
app.use(express.json());

app.post('/requests', (req, res) => {
    console.log(req.body);
    res.status(201).json('all ok');
  })

app.listen(4000, () => {console.log('Server listening on port 4000')});

我的请求是(使用 VS Code 的 REST 客户端完成):

POST http://localhost:4000/requests
Content-Type: 'application/json'

{
  "msg":"Some message",
  "other":"Other msg"
}

【问题讨论】:

  • 附加信息:我使用 nodejs 版本 12.22.9(需要它在旧的 32 位机器上运行)并表示 14.17.2。不知道会不会有影响……
  • 这是您的示例的一个稍微修改的实例,按预期工作:runkit.com/6181458f0d176000085690c3/61fae0ca7f1c740008e41379 - 使用 express.bodyParser 或 body-parser 模块没有区别。我找不到您上面显示的任何问题(除了缺少导入 express 模块的事实,我假设您只是在整理示例时忘记包含它)

标签: node.js express


【解决方案1】:

我正在使用 curl,即使使用节点 12.22.9,这个也可以在这里工作,很确定你只是忘记在顶部声明 express 或者你的其余客户端有问题

curl -X POST http://localhost:4000/requests -H 'Content-Type: application/json' -d '{"msg":"Some message","other":"Other msg"}'

.js

const express = require('express')
const app = express()

const bodyParser = require('body-parser');

app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());

app.use(express.urlencoded({ extended: false }));
app.use(express.json());

app.post('/requests', (req, res) => {
    console.log(req.body);
    res.status(201).json('all ok');
  })

app.listen(4000, () => {console.log('Server listening on port 4000')});

package.json

{
  "dependencies": {
    "body-parser": "^1.19.1",
    "express": "^4.17.2"
  }
}

【讨论】:

  • 非常感谢!!我猜是 VS Code 的 REST 扩展的设置,curl 命令在我的最后也起作用了!
【解决方案2】:

就像这里其他迷失灵魂的信息一样......

如果您在 Windows 系统上使用 REST 客户端应用程序,请确保您的请求没有上限。我的情况:

POST http://localhost:4000/requests/
content-type: application/json

{
  "msg":"Some message",
  "other":"Other msg"
}

AND(也是我的错误):不要将 application/json 放在任何类型的引号内,简单明了!

(我确实做了win和mac机器的请求,都没有工作,但就是这个原因!)

【讨论】:

    猜你喜欢
    • 2018-11-07
    • 2017-11-16
    • 2015-01-30
    • 1970-01-01
    • 2012-07-03
    • 1970-01-01
    • 2020-04-14
    • 1970-01-01
    • 2015-04-17
    相关资源
    最近更新 更多