[英]Nodejs - Express - Mongoose: PUT Request problems with save method
当我发出PUT请求时,Node向我显示此错误:
TypeError: product.save is not a function
(请参阅controllers / product.js中的save
函数)
我发现这是更新文档的正确形式,但是我有这个问题。
我正在共享部分代码:
app.js
var api = express.Router();
api.route('/products')
.get(ProductCtrl.findAll)
.post(ProductCtrl.add);
api.route('/products/:isbn')
.get(ProductCtrl.findByISBN)
.delete(ProductCtrl.delete)
.put(ProductCtrl.update);
app.use('/api', api);
车型/ product.js
var mongoose = require('mongoose');
var Schema = mongoose.schema;
var productSchema = mongoose.Schema({
isbn: {type: String},
title: {type: String},
author: {type: String},
template: {type: String},
active: {type: Number} //1 - Active, 0 - Inactive
});
module.exports = mongoose.model('Product', productSchema);
控制器/ product.js
//PUT - Update the product by ISBN
exports.update = function(req, res){
Product.find(req.params.isbn, function(err, product){
if(!product) res.status(404).send({message: 'Product not exits'});
console.log("PUT - /products/" + req.params.isbn);
product.isbn = req.body.isbn;
product.title = req.body.title;
product.author = req.body.author;
product.active = req.body.active;
product.template = req.body.template;
product.save(function(err){
if(err) return res.send(500,err.message);
console.log("Successfully updated: " + req.body.isbn);
res.status(200).json(product);
});
});
};
这是因为Model.find
返回项目数组,而不是特定的猫鼬对象。 因此,请尝试Model.findOne
或Model.findById(id,(err,data)={})
然后,您可以调用save
功能。 还有另一种方法,而不是两个查询尝试一个。 Model.findOneAndUpdate()
希望这可以帮助。
最好这样使用findOneAndUpdate
方法进行更新。 这样看起来简洁明了。
exports.update = function(req, res){
Product
.findOneAndUpdate({ isbn: req.params.isbn }, req.body)
.exec(function(err, product){
if(err) return res.status(500).json({err: err.message}):
res.json({product, message: 'Successfully updated'})
});
};
做这个
Product.find(req.params.isbn, function(err, product){
if(!product) res.status(404).send({message: 'Product not exits'});
console.log("PUT - /products/" + req.params.isbn);
product.isbn = req.body.isbn;
product.title = req.body.title;
product.author = req.body.author;
product.active = req.body.active;
product.template = req.body.template;
let updateproduct = new Product(product);
updateproduct.save(function(err){
if(err) return res.send(500,err.message);
console.log("Successfully updated: " + req.body.isbn);
res.status(200).json(product);
});
});
};
请用这个
exports.update = function(req, res){
Product.find(req.params.isbn, function(err, product){
if(!product) res.status(404).send({message: 'Product not exits'});
console.log("PUT - /products/" + req.params.isbn);
product.isbn = req.body.isbn;
product.title = req.body.title;
product.author = req.body.author;
product.active = req.body.active;
product.template = req.body.template;
Product.save(product,function(err,data){
if(err) return res.send(500,err.message);
console.log("Successfully updated: " + req.body.isbn);
res.status(200).json(product);
});
});
};
代替
exports.update = function(req, res){
Product.find(req.params.isbn, function(err, product){
if(!product) res.status(404).send({message: 'Product not exits'});
console.log("PUT - /products/" + req.params.isbn);
product.isbn = req.body.isbn;
product.title = req.body.title;
product.author = req.body.author;
product.active = req.body.active;
product.template = req.body.template;
product.save(function(err){
if(err) return res.send(500,err.message);
console.log("Successfully updated: " + req.body.isbn);
res.status(200).json(product);
}
);
});
};
这意味着您需要将product用作Product 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.