【发布时间】:2017-05-20 13:10:27
【问题描述】:
我有一个发布到我的 Node/Express api 的 React 应用程序。发布很好,但现在我正在删除,我无法弄清楚为什么 req.params 只返回标题字符串值的一部分。这似乎是一个我不知道的基本问题,所以如果这是一个荒谬的问题,请放轻松。
这是我的帖子,效果很好:
router.route('/movies')
.post(function(req,res) {
var movie = new Movie();
movie.title = req.body.title;
movie.genre = req.body.genre;
movie.actors = req.body.actors;
movie.year = req.body.year;
movie.rating = req.body.rating;
movie._id = new Date().getTime();
//save the movie and checkfor errors
movie.save(function(err) {
if (err) {
res.send(err);
} else {
res.json({message: "Movie created!"});
}
});
})
这是 POST 后 GET 的邮递员结果:
[
{
"_id": "586d94bf3175695e48f24fbd",
"rating": "5/5",
"year": "1981",
"genre": "Thriller",
"title": "The Godfather",
"__v": 0,
"actors": [
"[Robert DeNiro, Al Pacino]"
]
},
]
注意标题字符串是“教父”。现在,这是我的删除:
.delete(function(req,res) {
console.log('Title: ', req.params)
var query = {title: req.params.title};
Movie.findOneAndRemove(query, function(err, movie) {
if (err) res.send(err);
if(!movie) {
res.json({message: "No Movie found with that title"});
} else {
res.json({message: "Successfully deleted Movie"});
}
});
});
你会在那里看到我的 console.log,它的日志如下:
Title: { title: ' Godfather' }
我已经尝试过 JSON.stringify param.title 等,但我认为我只是在这里做一些完全错误的事情,这让我越是盯着相同的代码看越多。
编辑
这是进行 POST 的客户端代码。我使用以下 url 在 Postman 中测试的 DELETE 路由:
http://localhost:8080/api/movies/:The Godfather
handleSubmit() {
let movie = {
title: this.title.value,
genre: this.genre.value,
year: this.year.value,
actors: this.actors.value.split(','),
rating: this.rating.value
}
$.post( "http://localhost:8080/api/movies", movie );
【问题讨论】:
-
不确定这是否与它有关,但你为什么要将你的演员字符串化为数组中的数组?可能与手头的问题无关。您可以发布发出请求的客户端代码吗?
-
我已经编辑了这篇文章。对于演员来说,它是来自一个文本字段的字符串。
-
好像你的信息应该在 req.body...而不是 req.params。我可以和那个人一起离开,时间很晚了
-
我也访问过这个概念,但是在测试时,req.body 是空的,并且 req.params 有 {title: 'Godfather'}。所以我很确定 POST 查看 req.body 并且更新或删除需要使用发送的参数查找数据库,因此使用 req.params
标签: node.js mongodb express mongoose