【问题标题】:Using two apis one with object id and another with name使用两个 api,一个带有对象 ID,另一个带有名称
【发布时间】:2017-08-15 14:53:32
【问题描述】:

我有两个 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);
   });});

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

{
    "_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?我的代码有错误吗,请帮我解决这个问题?

【问题讨论】:

  • 那么,怎么了?
  • 如果我在 server.js 中包含两个 api,只有一个在工作。如何同时使用两个api?
  • 只有一种方法有什么作用?另一个是否开始抛出错误或返回不正确的数据?总是同一个不起作用,还是有时一个,有时另一个?如果没有所有相关信息,任何人都很难提供建设性的帮助。

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


【解决方案1】:

正如我从您的代码中了解到的那样,您可能会收到这两个参数,但您不知道何时使用什么。我将在两个不同的 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
  }
}

希望我的回答对你有所帮助。

【讨论】:

    【解决方案2】:

    您可以采取的一种方法是确定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);
        });
    });
    

    【讨论】:

      猜你喜欢
      • 2016-04-17
      • 2021-10-11
      • 2014-03-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-15
      • 2013-10-17
      • 2020-02-26
      相关资源
      最近更新 更多