【问题标题】:req.params returns a part of the valuereq.params 返回值的一部分
【发布时间】: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


【解决方案1】:

DELETE 工作正常。我的 Postman 网址中包含一个冒号,这对我产生了影响,使我转向了另一个方向。基本上,当我从这里更改原始网址时:

http://localhost:8080/api/movies/:The Godfather

到这里:

http://localhost:8080/api/movies/The Godfather

它工作得很好。

【讨论】:

  • 是的,我也看到了,但我认为这是您定义路线的方式,而不是您实际从客户端获取的方式。看看假设做了什么......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-10-24
  • 1970-01-01
  • 1970-01-01
  • 2010-09-18
  • 2012-11-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多