TypeError:无法读取平均堆栈中未定义的属性“upvote”

Posted

技术标签:

【中文标题】TypeError:无法读取平均堆栈中未定义的属性“upvote”【英文标题】:TypeError: Cannot read property 'upvote' of undefined in mean stack 【发布时间】:2015-08-05 17:57:22 【问题描述】:

我正在为我的应用程序使用 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 的第一行 【参考方案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 的属性。

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

【讨论】:

以上是关于TypeError:无法读取平均堆栈中未定义的属性“upvote”的主要内容,如果未能解决你的问题,请参考以下文章

TypeError:无法读取 null 的属性“标题”!平均堆栈

TypeError:无法读取反应js中未定义的属性'fn'

如何修复'TypeError:无法读取 Javascript 中未定义的属性'标题'

TypeError:无法读取reactjs中未定义的属性“长度”

TypeError:无法读取 Apollo 中未定义的属性“fetchMore”

TypeError:无法读取 Vue 中未定义的属性“id”