Javascript 角度6:使用ID向数据库添加数据

Javascript 角度6:使用ID向数据库添加数据,javascript,node.js,angular,express,Javascript,Node.js,Angular,Express,我有一个只显示来自外部api的电影的应用程序,因此我在我的应用程序中添加了单个电影的评论部分,我的问题是当用户在名为《泰坦尼克号》的电影中输入评论时,我可以看到添加到所有电影中的评论,这是错误的,我想要的是添加到电影《泰坦尼克号》中的评论不应该显示在其他电影中 以下是我所拥有的: server.js更新 service.js 问题 我的代码中缺少了什么 1) 在添加新评论的POST请求中添加相应的电影id addReview(movieId, author, description): Obse

我有一个只显示来自外部api的电影的应用程序,因此我在我的应用程序中添加了单个电影的评论部分,我的问题是当用户在名为《泰坦尼克号》的电影中输入评论时,我可以看到添加到所有电影中的评论
,这是错误的
,我想要的是添加到电影《泰坦尼克号》中的评论不应该显示在其他电影中

以下是我所拥有的:

server.js更新

service.js

问题

我的代码中缺少了什么

1) 在添加新评论的POST请求中添加相应的电影id

addReview(movieId, author, description): Observable<any> {
        const obj = {movieId, author, description};

例如,您应该/post到一个特定的电影ID,在那里您可以在其评论字段数组下添加新评论

此外,拥有/评论是一种不好的做法,因为你真正想要的是在特定电影中发布附加评论。如下所示:

router.post('/movie/:id/newcomment:', function(req, res) {
  Movie.findOne({ _id: req.params.id })
      .then(movie => {
         movie.comments.push(req.body.comment);
         movie.save();
             .then(result => {
             res.status(200).json({'message': 'comment added successfully'});})
             .catch(err => {
              res.status(400).send("unable to save to database");
            });
        }
});
但这里的主要问题是你误解了你到底需要做什么

您可以从现有API获取数据,但您希望从获取的数据向特定电影添加特定注释

如果不完全控制外部API,就无法实现此目标


实际上,您可以构建一个客户端数据结构来保存所有获取的数据,然后将另一个名为comments的属性和一个ID属性添加到该数据结构中的每个电影对象,因此,您以后可以通过ID访问该数据结构并更新特定属性。

代码看起来没问题。请同时发布getComments服务方法。服务方法addReview应该做什么?我认为它应该在一部特定的电影中添加一条评论,但是URL读起来不同。我曾经想象过类似于{movieId}/comments/@baj9032检查qn的东西现在,我已经添加了你请求getComments的方法service@addreview方法我想要一个评论应该使用ID添加到一个特定的电影中,现在它的评论被添加到所有的电影中而不是一个特定的电影中,我被困在这里如何解决这个问题,你能帮忙吗?那componet呢?组件调用addReview方法,对吗?它只需要将movieId作为参数传递。这是你的问题吗?是的,我尝试实现了你的方法,但它不起作用。我只想将注释发布到特定的ID,问题从服务器中的post for comments方法开始。问题是什么?如果您使用的是mongoose,您需要将movieId添加到您的评论模式中。您好,那么addReview的服务方法如何处理这些更改?
addReview(author, description) {
    this.moviesService.addReview(author, description).subscribe(success => {
        this.flashMessages.show('You are data we succesfully submitted', { cssClass: 'alert-success', timeout: 3000 });
        // get the id
        this.activeRouter.params.subscribe((params) => {
          // tslint:disable-next-line:prefer-const
          let id = params['id'];
          this.moviesService.getComments(id)
            .subscribe(comments => {
              console.log(comments);
              this.comments = comments;
            });
        });
    }, error => {
        this.flashMessages.show('Something went wrong', { cssClass: 'alert-danger', timeout: 3000 });
    });
}
addReview(movieId, author, description): Observable<any> {
        const obj = {movieId, author, description};
router.get('/comments/:movieId', function(req, res) {
  const movieId= request.params.movieId;
  Comments.find({ movieId });
router.post('/movie/:id/newcomment:', function(req, res) {
  Movie.findOne({ _id: req.params.id })
      .then(movie => {
         movie.comments.push(req.body.comment);
         movie.save();
             .then(result => {
             res.status(200).json({'message': 'comment added successfully'});})
             .catch(err => {
              res.status(400).send("unable to save to database");
            });
        }
});