MEAN Stack:具有查询参数的Expressjs路由

时间:2016-02-19 01:40:26

标签: node.js mongodb express mongoose mean

我有两个独立的模式 - 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 - -

1 个答案:

答案 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);
  });
});