【问题标题】:Node express req.body returns empty obj节点 express req.body 返回空 obj
【发布时间】:2021-05-05 10:27:09
【问题描述】:

这是我在客户端的获取请求

let data = JSON.stringify({
  "username": "test",
  "password": "test"
 });

 let response = await fetch("http://localhost:5050/api/login", {
  method: 'post',
  body: data
})

在节点服务器中,这是我用来登录的

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


router.post('/login', function(req, res) {
  console.log(req.body) // Returns {}
  res.json(JSON.stringify({success: "qwer123qwer324135142534123qwerqwersfg"}));
})

当打印req.body 返回{}。有大神知道怎么解决吗?

更新

我使用邮递员尝试了同样的事情。它在节点服务器中打印正确的对象。但是当只使用 fetch 时它会失败。

Package.json

"dependencies": {
   "body-parser": "^1.19.0",
   "cors": "^2.8.5",
   "express": "^4.17.1",
   "mongoose": "~3.6.13"
 }

【问题讨论】:

  • 你是否使用了body-parse等中间件(app.use())来解析body?
  • 您能否分享一下您可能包含在 app.js 文件中的 body-parser 中间件的代码?如果它通过邮递员而不是通过 fetch 工作,那么我们可能需要更新中间件中设置的选项。如果不查看中间件代码,将无法提供帮助。

标签: node.js express fetch


【解决方案1】:

Fetch API 默认将Content-Type 设置为 text/plain 的请求,在这种情况下,由于服务器 API 接受 JSON 数据,我们需要显式设置内容类型标头。将 fetch 代码更改为以下代码应该可以使其正常工作:

 let response = await fetch("http://localhost:5050/api/login", {
  method: 'POST',
  body: data,
  headers: {
      'Accept': 'application/json',
      'Content-Type': 'application/json'
    }
})

注意:(这不会影响在请求处理程序中收到的数据,但作为一般做法)

同样在服务器代码中,也不需要同时包含 body-parser / express 中间件来进行 json 解析。您可以使用:

app.use(bodyParser.json())
app.use(bodyParser.urlencoded(<options>))

app.use(express.json());
app.use(express.urlencoded(<options>));

无需同时包含两者。您可以在以下 stackoverflow 帖子中了解更多信息:https://stackoverflow.com/a/47232318/2235057

【讨论】:

    【解决方案2】:

    只要在 app.js 中这样尝试

    const bodyParser = require('body-parser');
    
    
    app.use(bodyParser.json())
    app.use(bodyParser.urlencoded({extended: false}))
    
    

    【讨论】:

      【解决方案3】:

      您需要使用中间件来解析正文:

      在您的应用中添加:

      app.use(express.json());
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-08-30
        • 2021-11-03
        • 2021-08-08
        • 1970-01-01
        • 1970-01-01
        • 2021-07-23
        • 1970-01-01
        • 2019-11-06
        相关资源
        最近更新 更多