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
解构了title
和body
:
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)
})
})
}
我正在尝试向我的服务器发出 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
解构了title
和body
:
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)
})
})
}