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:无法读取 Javascript 中未定义的属性'标题'
TypeError:无法读取reactjs中未定义的属性“长度”