我有两个独立的模式 - 1.用户2.计划。我试图找到属于用户的所有计划,但使用查询参数执行get请求不起作用。请帮助。
这是我的查询
http://localhost:8080/api/plans/search?userId=56bd16761e6bb0e5b2b43c9b
我通过这条路线获得所有计划,以便正常运作。
http://localhost:8080/api/plans/
这是我的计划模型
var PlanSchema = new mongoose.Schema({
title: {type: String},
userId: { type: mongoose.Schema.Types.ObjectId, ref: 'User' },
spots:[{
name: {type: String},
category: {type: String},
address: {type: String},
hours: {type: String},
phone: {type: String},
website: {type: String},
notes: {type: String},
imageUrl: {type: String},
dayNumber: {type: Number}
}]
});
这是我的计划路线。
PlansController.get('/', function(req, res){
Plan.find({}, function(err, plans){
res.json(plans);
});
});
PlansController.get('/:id', function(req, res){
Plan.findOne({_id: req.params.id}, function(err, plan){
res.json(plan);
});
});
PlansController.get('/search', function(req, res){
Plan.find({ userId: req.query.userId }, function (err, plans){
res.json(plans);
});
});
我做错了什么?在终端我得到了这个,
GET / api / plans / search?userId = 56bd16761e6bb0e5b2b43c9b 200 7.047 ms - -
答案 0 :(得分:1)
我想我明白了。由于搜索路由看起来类似于/:id route,因此它一直将搜索字符串视为ID并继续使用id路由。搜索路径必须包含在/:id路由之前。
这是更新的代码。
PlansController.get('/search', function(req, res){
console.log(req.query.userId);
Plan.find({ userId: req.query.userId }, function (err, plans){
console.log(plans);
res.json(plans);
});
});
PlansController.get('/:id', function(req, res){
Plan.findOne({_id: req.params.id}, function(err, plan){
res.json(plan);
});
});