Node的IdJS API GET。如何检测未找到的项目?

时间:2017-06-21 16:38:01

标签: node.js express amazon-dynamodb swagger endpoint

我正在开发一个GET端点来从数据库(dynamoDB)中获取元素。我正在使用Swagger在我的api中定义数据模型。这是我的控制器中的operationId方法:

 getInvoiceConfigById: function(req, res) {
   var myId = req.swagger.params.id.value;

   // InvoiceConfig is a dynamoDb model
   // providerId attribute is the unique key of the db table
   InvoiceConfig.scan('providerId')
                .eq(myId)
                .exec(function (err, config) {
                   if (err) {
                     console.log("Scan InvoiceConfig error");
                     throw err;
                   }

                   res.status(200).send(config);

                 });
 }

如果找不到ID,我想发送404消息。 我在swagger-ui中注意到响应的主体是空的

Response Body

[] 

在db中找不到id。 当找不到id时,如何在我的代码中检测到?我试图检查响应的主体是否为空:

if(!(config.body))

但这不起作用,因为正文不为空

3 个答案:

答案 0 :(得分:1)

您可以检查服务器端config的计数,如果配置计数为0,则发送请求响应代码404,否则返回200响应代码,数据如下所示

 getInvoiceConfigById: function(req, res) {
   var myId = req.swagger.params.id.value;

   // InvoiceConfig is a dynamoDb model
   // providerId attribute is the unique key of the db table
   InvoiceConfig.scan('providerId')
                .eq(myId)
                .exec(function (err, config) {
                   if (err) {
                     console.log("Scan InvoiceConfig error");
                     throw err;
                   }
                   if (config.length == 0){
                      res.status(404).end();
                   } else {
                      res.status(200).send(config);
                   }
                 });
 }

答案 1 :(得分:1)

尝试在回调中添加长度检查,如下所示:

getInvoiceConfigById: function(req, res) {
var myId = req.swagger.params.id.value;

// InvoiceConfig is a dynamoDb model
// providerId attribute is the unique key of the db table
InvoiceConfig.scan('providerId')
            .eq(myId)
            .exec(function (err, config) {
               if (err) {
                 console.log("Scan InvoiceConfig error");
                 throw err;
               }

               if(typeof config === 'array' && 0 < config.length){
                 res.status(200).send(config);
               } else {
                 res.status(404).send();
               }
             });
}

我还建议您只使用getItem查询而不是scan:

http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/DynamoDB.html#getItem-property

答案 2 :(得分:0)

由于config对象键值在找不到结果时为1,因此您可以检查该对象的键长度,如下所示:

if ( Object.keys(config).length == 1 )return res.status(400).send("Error 404");