RestFul API Node.js,Express - 错误状态 - 响应空数组

时间:2018-03-29 20:58:02

标签: node.js rest express nodeapi

我在Node.JS中创建了一个RestFull API,它检查特定的牌照是否在数据库(MySQL)中注册,在结束点我只是告知Ex板:(http:// localhost:3009 / _api_v1 / car / ABC2012)并使用get函数,如果此卡存在,它将以json格式返回此卡,直到它正常工作,但如果您输入未注册的卡(例如:http:// localhost:3009 / _api_v1 / car / WWW3432))应该返回一条消息err.status(错误(' 404 Not Found'),但它返回一个空数组[]而没有这条消息,如果你可以帮我解决这个疑问谢谢你!

router.get('/:id?', function (req, res, next){

    Node.getNodeBylicensePlate(req.params.id,function(err,rows){
      if(err)
      {
          res.json(err);
      }
      else
      {
          res.json(rows);
      }
    });
});

===========================

getNodeBylicensePlate:function(licensePlate,callback){

        return db.query("select licensePlate from car where licensePlate=?",[licensePlate],callback);
    },

2 个答案:

答案 0 :(得分:0)

我假设它是因为只有在出现真正的Sql错误(无效查询,超时,死锁等)时才会返回错误。

您需要询问rows变量,如果空结果返回404:

router.get('/:id?', function (req, res, next){

    Node.getNodeBylicensePlate(req.params.id,function(err,rows){
      if(err)
      {
          res.json(err);
      }
      else
      {
          if (!rows || !rows.length) {
             res.status(404);
          }
          else {
             res.json(rows);
          }
      }
    });
});

答案 1 :(得分:0)

我猜mysql查询返回一个空数组

router.get('/:id?', function (req, res, next){
    Node.getNodeBylicensePlate(req.params.id,function(err,rows){
      if(err) {
          res.json(err);
          return;
      }

      if (!rows.length)  {
        res.status(404).send({ message: 'Not Found' });
        return;
      }

      res.json(rows);
    });
});