这里试图找到一种更好的方法将dget_getItem写入dynamoDB中,如何返回未找到的记录,我们是否可以将record和'not found'字符串存储在同一响应变量中
public async getItem(){
let response;
try {
dynamoClient = new AWS.DynamoDB({
region: 'us-east-1'
})
data = await dynamoClient
.getItem(params)
.promise()
if(data.length == 0){
respoonse = 'no record found'
}else{
respnse = data
}
} catch (error) {
Logger.error('get error', error.stack)
}
return response;
}
答案 0 :(得分:0)
JavaScript在类型方面非常宽松。您的代码可以很好地运行node.js,但是IMO使用不一致的返回值是一种不好的做法。例如,Eslint有一个rule to check this。
要处理您的代码,一种选择是创建一个包含所需信息的数据库响应结构。简单的例子就是
{
data: <db-response> | null,
error: "not found" | <some error> | null
// ... other field as needed
}
使用此方法,您还可以在代码引发异常时解决此问题。只需在error
字段中包含足够的信息即可。
在getItem()
的客户端,您可以根据需要检查data|error
的存在。
这是满足您要求的非常简单的方法。不利的一面是,它在客户端增加了逻辑,成为检查数据/错误是否存在的负担。
要考虑的另一个选项是使用Maybe结构。基本上,响应可能有数据或没有数据。无论如何,客户都有责任处理可能找不到的数据案件并采取相应行动。
注意:Maybe本身不在该线程的主题范围之内,我将不做进一步解释。搜索网络将为您提供比我能提供的更为详尽的信息,并且为您提供了更好的资源。