Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Nodejs-Express-Mongoose:使用save方法处理请求问题_Javascript_Node.js_Mongodb_Express_Mongoose - Fatal编程技术网

Javascript Nodejs-Express-Mongoose:使用save方法处理请求问题

Javascript Nodejs-Express-Mongoose:使用save方法处理请求问题,javascript,node.js,mongodb,express,mongoose,Javascript,Node.js,Mongodb,Express,Mongoose,节点在我发出PUT请求时显示此错误: TypeError:product.save不是函数 (参考controllers/product.js中的保存功能) 我发现这是更新文档的正确表单,但我有这个问题 我正在分享部分代码: app.js var api = express.Router(); api.route('/products') .get(ProductCtrl.findAll) .post(ProductCtrl.add); api.route('/products/:i

节点在我发出PUT请求时显示此错误:

TypeError:product.save不是函数
(参考controllers/product.js中的
保存
功能)

我发现这是更新文档的正确表单,但我有这个问题

我正在分享部分代码:

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);
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);
//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);
    });
});
};
models/product.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);
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);
//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);
    });
});
};
控制器/product.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);
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);
//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
返回一个项目数组,而不是一个特定的mongoose对象。因此,请尝试
Model.findOne
Model.findById(id,(err,data)={})

然后您可以调用
save
函数。还有另一种方法,不是两个查询,而是尝试一个查询<代码>Model.findOneAndUpdate()


希望这有帮助。

这是因为
模型。find
返回一个项目数组,而不是特定的mongoose对象。因此,请尝试
Model.findOne
Model.findById(id,(err,data)={})

然后您可以调用
save
函数。还有另一种方法,不是两个查询,而是尝试一个查询<代码>Model.findOneAndUpdate()

希望这有帮助。

做这个

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);
    });
});
};
这样做

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);
        }

);
});
};
这意味着您需要使用产品作为产品

请使用此

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);
        }

);
});
};

这意味着您需要使用产品作为产品

最好使用mongoose
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'})
    });
};

最好使用mongoose
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'})
    });
};

谢谢Rajesh Dan,我使用了Model.findOneAndUpdate()和所有预期的工作!当然,很乐意帮忙@阿方索·桑切斯!:)谢谢Rajesh Dan,我使用了Model.findOneAndUpdate()和所有预期的工作!当然,很乐意帮忙@阿方索·桑切斯!:)