gpt4 book ai didi

javascript - Mongoose findByIdAndUpdate 不更新数据

转载 作者:行者123 更新时间:2023-11-30 15:09:53 24 4
gpt4 key购买 nike

似乎无法理解为什么 findByIdAndUpdate 没有更新数据。我将其更改为 findByIdAndRemove 以查看是否可以发现错误,但是当我更改它时,它确实被删除了,因此我无法找到问题所在。提前感谢您的帮助。

这是路线

    router.get("/:id/edit", function(req, res){
Product.findById(req.params.id, function(err, foundProduct){
res.render("admin/edit",{product: foundProduct});
});
});


router.put("/:id",function(req, res){
Product.findByIdAndUpdate(req.params.id, req.body.product, function(err, updatedProduct){
if(err){
res.redirect("/");
}else{
res.redirect("/admin/inventory");
}
});
});

这是进入编辑表单的按钮:

<h2>This is the inventory page!</h2>

<% include ../partials/header%>

<a href="/admin/new">Add a new product</a>

<div class = "row">
<% products.forEach(function(product){ %>
<div class = "col-sm-6 col-md-4">
<div class = "thumbnail">
<img src = <%=product.imagePath%> alt = "..." class = "img-responsive">
<div class = "caption">
<h3><%=product.title%> </h3>
<p class = "description"> <%=product.description%> </p>
<div class = "clearfix">
<div class = "price pull-left">$<%=product.price%> </div><br><br>
<a href = "/admin/<%=product._id%>/edit"class = "btn btn-info pull-right" role = "button" > Edit</a>
<form id="delete-form" action="/admin/<%= product._id %>?_method=DELETE" method="POST">
<button class="btn btn-danger">Delete</button>
</form>
</div>
</div>
</div>
</div>
<% }); %>
</div>



<% include ../partials/footer%>

这是编辑表单:

<% include ../partials/header %>

<h2>This is the inventory edit page</h2>


<div class="container">
<div class="row">
<h1 style="text-align: center">Edit</h1>
<div style="width: 30%; margin:25px auto">
<form action="/admin/<%=product._id%>?_method=PUT" method="POST">
<div class="form-group">
<input class="form-control" type="text" name="product[title]" value="<%=product.title%>">
</div>
<div class="form-group">
<input class="form-control" type="text" name="product[imagePath]" value="<%=product.imagePath%>">
</div>
<div class="form-group">
<input class="form-control" type="text" name="product[description]" value="<%=product.description%>">
</div>
<div class="form-group">
<input class="form-control" type="text" name="product[price]" value="<%=product.price%>">
</div>
<div class="form-group">
<button class="btn btn-lg btn-primary btn-block">Submit!</button>
</div>
</form>
<a href="/">Go Back</a>
</div>

</div>
</div>

<% include ../partials/footer %>

产品型号如下:

var mongoose = require('mongoose');

module.exports = mongoose.model('Product',{
imagePath: {type: String, required: true},
title: {type: String, required: true},
description: {type: String, required: true},
price: {type: Number, required: true}
});

最佳答案

您的表单正在使用“扩展格式”参数名称:

<input class="form-control" type="text" name="product[title]" ...>

但是,如果您在 body-parser 中禁用扩展格式解析,则 req.body 中的结果值将是错误的:

{ 'product[title]' : 'value' }

(而不是 { product : { title : 'value' } } )

您应该启用扩展格式解析:

app.use(bodyParser.urlencoded({ extended : true }));

文档:https://github.com/expressjs/body-parser#extended

关于javascript - Mongoose findByIdAndUpdate 不更新数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45262249/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com