我是node.js和mongoose的新手,如果有人可以帮助我解决以下错误,我会很感激。
我通过以下函数发出一个put请求(该函数的目的是“upvote”一个论坛帖子。
o.upvote = function(post) {
return $http.put('/posts/' + post._id + '/upvote')
.success(function(data){
post.upvotes += 1;
});
};
这又转到了我的路线:
index.js(我的路线)
router.put('/posts/:post/upvote', function(req, res, next) {
req.post.upvote(function(err, post){
if (err) { return next(err); }
res.json(post);
});
});
以下是我的模特
Posts.js
var mongoose = require('mongoose');
var PostSchema = new mongoose.Schema({
title: String,
link: String,
upvotes: {type: Number, default: 0},
comments: [{ type: mongoose.Schema.Types.ObjectId, ref: 'Comment' }]
});
mongoose.model('Post', PostSchema);
PostSchema.methods.upvote = function(cb) {
this.upvotes += 1;
this.save(cb);
};
在我的index.js路由中,在“req.post.upvote”行上抛出以下错误:
TypeError:req.post.upvote不是函数
答案 0 :(得分:2)
req.post
不会自动设置。您需要另一个中间件来设置它,但很可能您希望通过参数从DB获取它。
const Post = mongoose.model("Post");
router.put("/posts/:post/upvote", (req, res, next) => {
Post.findById(req.params.post, (err, post) => {
if (err) return next(err);
post.upvote((err, post) => {
if (err) return next(err);
res.json(post);
});
});
});
编辑:您还需要在中设置方法,然后在mongoose中创建架构:
PostSchema.methods.upvote = function(cb) {
this.upvotes += 1;
this.save(cb);
};
mongoose.model('Post', PostSchema);