我基本上构建了一个允许用户更新其信息的表单应用。所有表单数据都存储在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);
答案 0 :(得分:0)
您的路线处理程序接受POST /:itemid
,但您的表单会发送POST /mylist/:itemid
。这导致快速解析mylist作为您的id。将您的路线更改为/mylist/:itemid
或从表单/ mylist中删除