Express无法识别来自邮递员对PUT请求的正确请求正文

时间:2019-02-21 01:40:18

标签: javascript node.js mongodb express postman

我正在使用Express和MongoDB开发极其简单的CRUD后端。它甚至没有前端,我只是使用Postman来验证每个请求是否按预期工作。到目前为止,这是我的单页应用程序的样子:

server.js

const express = require('express')
const bodyParser = require('body-parser')
const MongoClient = require('mongodb').MongoClient

let ObjectId = require('mongodb').ObjectId;

const app = express()
const uri = 'mongodb+srv://<USER>:<PW>@<REDACTED>.mongodb.net/test?retryWrites=true'

let db

MongoClient.connect(uri, { useNewUrlParser: true }, (err, client) => {
  if (err) return console.log(err)
  db = client.db(<COLLECTION_NAME>)
    app.listen(3000, () => {
      console.log('Listening on port 3000')
    })
})

app.put('/todo', (req, res) => {
   db.collection('todo').updateOne({_id: 
      ObjectId(req.body.id)}, {
       $set: {item: req.body.value}
   }, (err, result) => {
        if (err) return console.log(err)
        res.send('Todo updated')
   })
})

我已经使用有效的POST请求(未显示)在MongoDB Atlas中填充了集群的集合。这是在本地运行服务器后在Postman中尝试过的事情:

enter image description here

enter image description here

现有Todo的ID在Atlas集群中定义明确,但是当我在server.js中PUT请求的回调函数的第一行中记录req.body.value的值时,它显示了该集群中Todo中的现有值,而不是通过邮递员实际提供的值。为什么无法识别来自Postman的请求正文?

1 个答案:

答案 0 :(得分:1)

This post有助于找出问题所在。我需要导入bodyParser.json()中间件并将其包含在PUT请求中。然后,我在Postman客户端中使用了原始json来成功发送PUT请求。