我正在开发一个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))
但这不起作用,因为正文不为空
答案 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");