处理投射错误的建议? NodeJS | MongoDB的

时间:2018-03-17 20:16:05

标签: node.js mongodb

我基本上构建了一个允许用户更新其信息的表单应用。所有表单数据都存储在MongoDB中。我也使用pug模板来渲染我的页面。

但是,我使用下面的代码获得了一些时髦的行为。当我点击我的哈巴狗模板上的更新细节进行更新时,终端显示:{CastError:Cast to ObjectId失败,值为#34; mylist"在路径" _id" for model" Photo"

我的页面一直在加载并说等待本地主机。奇怪的是当我回到我的主页并单击刷新时,我在页面和MongoDB中看到了更新的详细信息。当我尝试发布新条目时也是如此。我认为这是因为以下特定的代码片段......

  router.get('/:itemid', (req, res, next)=>{
  Photo.findOne({'_id': req.params.itemid})
      .then((photo)=>{
          res.render('update', {
                item: photo
        });     
    }).catch((err)=>{
        if (err){
            console.log(err);
        }
    });

});

router.post('/:itemid', (req, res, next)=>{
    Photo.findOne({'_id': req.params.itemid})
        .then((photo)=>{
            var data = {
                destination: req.body.destination,
                description: req.body.description
            }
        photo.set(data);
        photo.save().then(()=>{
            res.redirect('/mylist');
        });
        }).catch((err)=>{
          if (err){
            console.log(err);
        }
    }); 
});

下面的pug模板:

block content
  h1 Updating Your Listing 

  .row
    .col-sm-3
      p Destination: #{item.destination} 
      p Description: #{item.description}
      img(src=item.imageurl, width="250")
      form(method='POST', action='/mylist/' + item._id)
        .form-group
          label(for='destination') Destination:
          input#name.form-control(type='text', value=item.destination 
name='destination')
        .form-group
          label(for='description') Description:
          input#email.form-control(type='text', 
value=item.description name='description')     
        button.btn.btn-primary(type='submit') Update Listing 
Information

架构:

    var schema = new Schema ({
        mimetype: {type: String, required: true},
        filename: {type: String, required: true},
        imageurl: {type: String, required: true},
        description: {type: String, required: true},
        destination: {type: String, required: true},
        createdAt: {type: Date},
        updatedAt: {type: Date}
     }); 

// export models 
 module.exports = mongoose.model("Photo", schema);

1 个答案:

答案 0 :(得分:0)

您的路线处理程序接受POST /:itemid,但您的表单会发送POST /mylist/:itemid。这导致快速解析mylist作为您的id。将您的路线更改为/mylist/:itemid或从表单/ mylist中删除