POST request error: Path `title` and `body` are required

POST request error: Path `title` and `body` are required

我正在尝试向我的服务器发出 POST 请求以创建一个新的 post(标题,body)并将其保存在数据库中,我正在接收一个 200 状态代码但是标题和 body 没有被插入到 post.

更新:我刚刚将控制器方法中的 return res.status(400).json({ error: errorHandler(err) }) 更改为 res.send(err),现在我收到一条明确的错误消息:需要标题和 body 路径。

我该如何解决这个问题?

CreatePost.js

 class CreatePost extends React.Component {
     constructor(props) {
         super(props)
     
         this.state = {
              title: '',
              body: ''
         }
     }
     
     changeHandler = (e) => {
         this.setState({ [e.target.name]: e.target.value })
     }
     

     submitHandler = e => {
         e.preventDefault()
         axios.post(`${API}/blog/post/create`, this.state)
         .then(response => {
             console.log(response)
         }).catch(error => {
             console.log(error)
         })
     }
    render() {
        const {title, body} = this.state
        return (
            <div>
                <form onSubmit={this.submitHandler}>
                <input type="text" name="title" 
                onChange={this.changeHandler} value={title} />
                <input type="text" name="body"
                onChange={this.changeHandler} value={body}/>
                <button type="submit">Submit</button>
                </form>
            </div>
        )
    }
}

export default CreatePost

controllers/post.js

exports.create = (req, res) => {
  let post = new Post()
  post.save((err, result) => {
    if(err) {
    return res.status(400).json({
        error: errorHandler(err)
    })
    }
    res.json(result)
    })
}

routes/posts.js

router.post('/blog/post/create', create);

您是否尝试从 Postman or Insomnia(我最喜欢的)调用您的端点以验证它已启动并且 运行?这是独立于代码测试端点的好方法。

由于您没有在代码中使用 HTTP 404,我怀疑它来自 Express 的内部机制。

顺便说一句,动词 POST 和 API uri 中的 'create' 部分表达的是相同的意图。你可以去掉这个创建部分。这被认为是 best practices.

之一

试试这个。

axios({ url: `${API}/blog/post/create`, method: 'POST', data: this.state})

我已经解决了这个问题。我实际上并没有将标题和 body 插入 post object.

我从req.body解构了titlebody
const {title, body} = req.body
并将数据插入 object let post = new Post({title, body}).

controllers/posts.js

exports.create = (req, res) => {
  const {title, body} = req.body
  let post = new Post({title, body})

  post.save()
  .then(response => {
  res.send(response)
    .catch(err => {
      res.send(err)
})
})
}