2015-05-23 38 views
2

我正在使用MEAN堆栈用于我的应用程序,并且我在每个问题的应用程序中都有一个upvote节,试图upvote一个问题TypeError: Cannot read property 'upvote' of undefined。我的路线文件是这样的:TypeError:无法读取属性'upvote'中的未定义堆栈

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

不太清楚错误是什么。

+0

我对MAN堆栈一无所知,但是我知道angular,express和nodejs。和原因的javascript ;-)错误消息告诉你,该req.question是null或undefined。我不知道足够100%肯定。但我认为猫鼬中间件不能正确地将问题对象添加到请求中。是否有错误日志?或者你忘记添加猫鼬中间件;-)或者猫鼬使用另一个变量req.xyz? –

+0

'req.question'在哪里设置? – mscdex

+0

@mscdex他使用mongose中间件。我假设这个中间件从mongodb中读取一个对象,这个对象是由他提供的id:id来提供的(...。然后这个对象被丰富了questionSchema.methods中定义的方法添加到请求中。通过执行一个console.dir(req);作为函数exports.upvoteQuestion中的第一行 –

回答

-1

你试图参考upvotes作为问题的属性,如果你改变问题是:

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

你可以参考其与此: req.question.upvote

然后更改给予好评的方法来此第二行:

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

,因为它是现在定义,upvotes是questionSchema的属性,如果这是你爱民什么g因为你不能把它称为问题的属性。

虽然我没有与猫鼬合作过。

+0

即使这样也不会工作AFAIK。 – SarathMS

相关问题