使用带有对象id的两个apis和带有名称的另一个

时间:2017-03-23 07:15:41

标签: node.js mongodb mongodb-query mean-stack

我有两个api调用,使用不同的参数从同一个集合中检索数据。

第一个是ObjectID:

app.get('/api/employees/:id', function(req, res){
    Employee.findOne({_id:req.params.id}, function(err, employee){
      if(err)
        res.send(err);
      res.json(employee);
  }); });

第二个按名称检索数据:

app.get('/api/employees/:name', function(req, res){
    Employee.findOne({name:req.params.name}, function(err, employee){
        if(err)
            res.send(err);
        res.json(employee);
   });});

我将两个Apis放在我的代码中,但只调用了第一个。如果我运行我的代码,我有类似的东西:

{
    "_id": "58b00dd47689fc2f48b9baf4",
    "name": "Rohtih",
    "dept": "CSE",
    "area": "Banglore",
    "contact": "9962938489",
    "status": "System Engineer",
    "salary": "30000",
    "__v": 0
},

我的mongo系列看起来像这样:

{
    "_id": "58b00dd47689fc2f48b9baf4",
    "name": "Rohtih",
    "dept": "CSE",
    "area": "Banglore",
    "contact": "9962",
    "status": "System Engineer",
    "salary": "30000",
    "__v": 0
},
{
    "_id": "58b00df07689fc2f48b9baf5",
    "name": "Vaibhav",
    "dept": "CSE",
    "area": "Banglore",
    "contact": "819",
    "status": "Manager",
    "salary": "300000",
    "__v": 0
}

我想知道如何一次使用两个api?我的代码中有错误,请帮我解决这个问题吗?

2 个答案:

答案 0 :(得分:0)

正如我从您的代码中可以理解的那样,您可能会收到这两个参数,但您不知道何时使用这些参数。我将在两个不同的api调用中分开:

第一个是通过Id找到:

app.get('/api/employees/findById', function(req, res){
  Employee.findOne({_id:req.params.id}, function(err, employee){
    if(err)
        res.send(err);
    res.json(employee);
  }); });

第二个是按名称查找:

app.get('/api/employees/findByName', function(req, res){
  Employee.findOne({name:req.params.name}, function(err, employee){
    if(err)
        res.send(err);
    res.json(employee);
  });});

如果您不喜欢这些方法,可以保持原样并验证参数是否存在,例如:

app.get('/api/employees/find', function(req, res){
  let name = req.params.name;
  let id = req.params.id;
  if(name !== undefined) {
     //Find By name here
  } else if(id !== undefined) {
    //Find by id here
  }
}

希望我的回答很有帮助。

答案 1 :(得分:0)

您可以采用的一种方法是确定req.params.id字符串的值(如果它是有效的ObjectId),然后根据结果创建查询。例如:

app.get('/api/employees/:id', function(req, res){
    var query = {};
    if (mongoose.Types.ObjectId.isValid(req.params.id)) {
        query._id = req.params.id;
    } else {
        query.name = req.params.id;
    }

    Employee.findOne(query, function(err, employee){
        if(err)
            res.send(err);
        res.json(employee);
    });
});