在没有 body-parser 的情况下访问 express 中的 req.body 个值

accessing req.body values in express without body-parser

我正在尝试使用我的应用程序设置一个简单的 google 登录服务。

我重新创建了一个简化版本的登录方案。

在由 google 编辑的 id_token return 上使用 console.log() 时,我得到了例外的令牌。在登录文件中,我使用 xhr.send(JSON.stringify({ token: id_token })); 将令牌发送回后端。

Express 应用看起来像这样:

console.clear()
const express = require('express')
const bodyParser = require('body-parser')
const app = express()

const port = process.env.PORT || 3000

app.set('view engine', 'ejs')
app.use(express.json())
app.use(express.urlencoded({extended: true}))

app.post('/login', (req, res) =>{
    console.log(req.body)
    console.log(req.body.token)
})

app.listen(port, ()=>{
    console.log(`Server running on http://localhost:${port}`)
})

为什么 console.log(req.body) return 是正确的 json 对象而 console.log(req.body.token) return 未定义?到目前为止,不幸的是我只在使用 bodyParser 时找到了方法。

响应req.body

{ '{"token":"eyJ...c9g"}': ''}

编辑:

正如 Mohamed 所建议的(标记答案),我最终编辑了正文本身:

xhr.send('idtoken=' + id_token); 允许我使用 console.log(req.body.idtoken)

body-parser 与 express.json 相同,您可以在此处看到 https://github.com/expressjs/express/blob/master/lib/express.js

您的 req.body 有一个嵌套对象作为键,其中的值为空字符串 JSON 对象本身

{ '{"token":"eyJ...c9g"}': ''}

这部分是一个键,它的值是一个空字符串

'{"token":"eyJ...c9g"}'

试试 JSON.parse(Object.keys(req.body)[0]).token

但即使这可行,它仍然不是最佳做法,您应该编辑发送正文的方式