【发布时间】:2016-06-05 14:33:33
【问题描述】:
我正在构建我的第一个平均堆栈应用程序,但在配置所有路由和取回我想要的数据时遇到了麻烦。
我有两个模型。
课程:
var CourseSchema = new mongoose.Schema({
code: String,
name: String,
courseContentGrade: Number,
courseTeachingGrade: Number,
courseAverage: Number,
reviews: [{ type: mongoose.Schema.Types.ObjectId, refs: 'review'}]
});
和审查:
var ReviewSchema = new mongoose.Schema({
contentReview: String,
teachingReview: String,
contentGrade: Number,
teachingGrade: Number,
average: Number,
professor: String,
trimester: {
type: String,
enum: ['T1', 'T2', 'T3']
},
day: {
type: String,
enum: ['Lundi', 'Mardi', 'Mercredi', 'Jeudi', 'Vendredi', 'Samedi']
},
time: {
type: String,
enum: ['9h-12h', '13h15-16h15', '16h30-19h30']
},
round: {
type: String,
enum: ['1', '2', '3']
},
bet: Number,
year: Number,
upvotes: {type: Number, default: 0},
author: String,
course: { type: mongoose.Schema.Types.ObjectId, ref:'Course'}
});
我已经设置了能够获取所有课程并获得特定课程的所有评论的路线。当我使用 curl 获取特定课程的评论时 (localhost:3000/courses{course.id}) 我只能返回 [] 但是当我使用 curl 获取所有课程时 (localhost:3000/courses/{course.id}/reviews) 我会返回所有课程以及我拥有的每门课程: "reviews":["review.id","review2.id"]。当我卷曲特定评论 (localhost:3000/reviews/{review.id}) 时,我得到了评论对象。
到目前为止,我已经配置了这些路线:
router.get('/courses', function(req, res, next) {
Course.find(function(err, courses){
if(err){ return next(err); }
res.json(courses);
});
});
router.get('/reviews/:review', function (req, res) {
res.json(req.review);
});
router.get('/courses/:course', function (req, res) {
res.json(req.course);
});
router.get('/courses/:course/reviews', function (req, res){
res.json(req.course.reviews);
});
我使用这些参数:
router.param('review', function (req, res, next, id) {
var query = Review.findById(id);
query.exec(function (err, review){
if(err) { return next(err);}
if(!review) {return next(new Error('can\'t find review'));}
req.review = review;
return next();
});
});
router.param('course', function (req, res, next, id) {
var query = Course.findById(id).populate('reviews');
query.exec(function (err, course){
if(err) { return next(err);}
if(!course) {return next(new Error('can\'t find course'));}
req.course = course;
return next();
});
});
编辑:
该问题的解决方案是填充函数(见下文),除此之外,我在课程中引用它时使用“review”作为模型的名称而不是“review”(注意 R/r ) 当我在课程中有一个 s 时,我没有在这一点上提出任何错误....不知道为什么。
【问题讨论】: