TypeError:不是mongoose和node.js中的函数

我是新来的node.js和mongoose,我会很感激,如果有人能帮助我的下面的错误。

我通过以下function发出了一个请求(function的要点是“upvote”论坛post。

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不是一个函数

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中创build架构:

 PostSchema.methods.upvote = function(cb) { this.upvotes += 1; this.save(cb); }; mongoose.model('Post', PostSchema);