【问题标题】:ExpressJS request.params and request.body emptyExpressJS request.params 和 request.body 为空
【发布时间】:2017-03-23 18:43:20
【问题描述】:

试图发送一个简单的 post 请求,body 属性是空对象 {}。有谁知道为什么?

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

app.set('port', process.env.PORT)

// Support JSON-encoded and encoded bodies.
app.use(bodyParser.json())
app.use(bodyParser.urlencoded({ extended: true }))

app.post('/api/' + APIVersion.latest() + '/post-job', (req, res) => {
  console.log(req.body)
  res.json({ hey: 'hey' })
})

// Start the server.
app.listen(app.get('port'), err => {
  if (err) {
    return console.log('There was an error', err)
  }

  console.log(`Server running on port ${app.get('port')}`)
})

【问题讨论】:

标签: node.js express


【解决方案1】:

req.params 为空,因为您的路线未指定任何内容。

Express中,params指的是路由/url参数。例如,如果您想要一个允许您动态指定用户姓氏的路由,您可以这样做:

app.get('/users/:last/info', (req, res) => {
    // ....
})

这将为路由提供last 的参数,可通过req.params.last 访问。

【讨论】:

  • 谢谢,有道理!为什么不显示身体的任何提示?根据 httpbin 响应,请求是否正确?
  • 如果您通过查询系统传递数据,req.body 也会为空
  • 我现在已经删除了这些行,将更新示例。尝试从 hurl.it 发送请求,不幸的是仍然是相同的结果。
  • 您是否使用 javascript 在您的 api 上请求路由?
  • 老兄,刚刚想通了!我错误地将标头传递给请求!非常感谢你! (今天码了一阵子哈哈)
【解决方案2】:

req.params 持有route params,例如对于/users/:id

GET /users/123
req.params.id = 123

如果您请求了/api/v1/post-job?test=value,您想访问req.query,或者如果您发布了任何内容,您想访问正文本身。

【讨论】:

  • 谢谢,有道理!为什么不显示身体的任何提示?根据 httpbin 响应,请求是否正确?
【解决方案3】:

如果没有填充 req.body,您需要检查发送 POST 请求的方式,因为 req.body 与 URL 完全分开。如果是 HTML 格式:

<form action="/person" method="POST">
  <input name="firstName" type="text">
  <button>Submit</button>
</form>

如果您通过其他途径发送请求,则必须查看该 API 的文档。

【讨论】:

    猜你喜欢
    • 2023-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-06
    • 1970-01-01
    • 2018-01-06
    • 1970-01-01
    • 2016-07-23
    相关资源
    最近更新 更多