【问题标题】:TypeError: Cannot read property 'upvote' of undefined in mean stackTypeError:无法读取平均堆栈中未定义的属性“upvote”
【发布时间】:2026-02-16 16:20:03
【问题描述】:

我正在为我的应用程序使用 MEAN 堆栈,并且我的应用程序中有一个针对每个问题的 upvote 部分,试图为 TypeError: Cannot read property 'upvote' of undefined 表示的问题投票。我的路线文件是这样的:

routes.js

app.put('/api/questions/:id/upvote', questions.upvoteQuestion);

Question.js(模型)

var questionSchema = mongoose.Schema({
    question: {type:String, required:'{PATH} is required!'},
    category: [String],
    upvotes: {type: Number, default: 0},
    comments: [{ type: mongoose.Schema.Types.ObjectId, ref: 'Comment' }],
    author: String
});

questionSchema.methods.upvote = function(cb) {
    this.upvotes += 1;
    this.save(cb);
};

questions.js(控制器)

exports.upvoteQuestion = function(req, res, next) {
    req.question.upvote(function(err, question){
        if (err) { return next(err); }
        res.json(question);
    });
};

不太清楚是什么错误。

【问题讨论】:

  • 我对 MAN 堆栈一无所知,但我知道 angular、express 和 nodejs。和原因的 javascript ;-) 错误消息告诉你,req.question 为空或未定义。我对猫鼬的了解不足以百分百确定。但我假设猫鼬中间件没有正确地将问题对象添加到请求中。有错误日志吗?或者你忘记添加 mongoose 中间件 ;-) 或者 mongoose 使用另一个变量 req.xyz ?
  • req.question 设置在哪里?
  • @mscdex 他使用 mongose 中间件。我假设这个中间件从 mongodb 中读取一个对象,该对象由他提供的 app.put(... 提供的 :id通过执行 console.dir(req); 作为函数exports.upvoteQuestion 的第一行

标签: javascript node.js mongoose mean-stack


【解决方案1】:

如果您将问题更改为:

question: {type:String, required:'{PATH} is required!', upvotes: {type: Number, default: 0}}

你可以参考它: req.question.upvote

然后把upvote方法的第二行改成这样:

questionSchema.methods.upvote = function(cb) {
    this.question.upvotes += 1;
    this.save(cb);
};

正如现在定义的那样,upvotes 是 questionSchema 的属性,如果这是您的目标,您不能将其称为 question 的属性。

不过,我没有使用过猫鼬。

【讨论】:

    最近更新 更多