我正在构建我的第一个平均堆栈应用程序,并且无法配置所有路由并获取我想要的数据。
我有两个型号。
课程:
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'作为我的模型的名称在引用它时,而不是'评论' (注意R / r)当我在ref中有一个s时,我没有在那一点上提出错误......不知道为什么。
答案 0 :(得分:0)
您需要更改以下路线以包含填充功能:
Router.get('/courses', function(req, res, next) {
Course.find().populate('reviews').exec(function(err, courses){
if(err){ return next(err); }
res.json(courses);
});
});
写在手机上,对任何拼写错误道歉!