【问题标题】:Update/Put error save in Express and Mongoose在 Express 和 Mongoose 中更新/放置错误保存
【发布时间】:2014-05-12 23:16:01
【问题描述】:

我是 Express 的初学者。我的路由器/控制器中有以下代码用于更新模型。一方面我不想修改“create_date”参数的日期,另一方面这段代码返回一个错误。

updateFood = function(req, res){
    Food.findById(req.params.id, function(err, food){
        food.food_name = req.body.food_name;
        food.description = req.body.description;
        food.image = req.body.image;
        food.create_date = Date.now();
        food.category = req.body.category;

        Food.save(function(err){
            if (!err){
                console.log("updated!");
            } else {
                console.log(err);
            }
        });

        res.send(food);
    });
};

这是我的架构:

var food = new Schema({
    food_name: {type: String, unique: true},
    description: String,
    image: String,
    create_date: {type: Date, default: Date.now()},
    category: {
        type: String,
        cats: ['Meat', 'Fish', 'Vegetables']
    }
});

module.exports = mongoose.model('Food', food);

当我尝试使用 PUT 使用 Postman 更新食物时。控制台返回以下响应:

            Food.save(function(err){
                 ^
TypeError: Object function model(doc, fields, skipId) {
    if (!(this instanceof model))
      return new model(doc, fields, skipId);
    Model.call(this, doc, fields, skipId);
  } has no method 'save'

我能做什么?有谁知道我的错误在哪里?谢谢。

【问题讨论】:

  • 通过安慰 'food' 来判断 findById 是否有效。
  • @Foreever 是的,它正在工作,它通过 id 响应带有我选择的“食物”的 json。
  • 您尝试仅更新一个字段,例如。带有一些测试值的描述。检查这是否有效。
  • 您不应该保存实例吗?所以应该是 food.save() 而不是 Food.save()
  • 是的,错误出现在 Food.save(...) 而不是 Food.save(...) 上,谢谢 :) 但是不修改“creation_date”我该怎么办?跨度>

标签: javascript node.js mongodb express mongoose


【解决方案1】:

我相信您的意思是 food.save(..); 而不是 Food.save(..);,但如果您所做的只是更新模型,您可以改用 findByIdAndUpdate()

【讨论】:

  • 是的,错误出现在 Food.save(...) 而不是 Food.save(...) 上,谢谢 :) 但是不修改“creation_date”我该怎么办?跨度>
猜你喜欢
  • 2018-08-15
  • 2017-12-07
  • 2018-08-15
  • 2020-04-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-21
  • 2021-08-29
相关资源
最近更新 更多