检查GetItem是否在dynamoDB中找不到记录的正确方法是什么?

时间:2019-03-08 19:35:02

标签: node.js amazon-dynamodb

这里试图找到一种更好的方法将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;
    
}

1 个答案:

答案 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本身不在该线程的主题范围之内,我将不做进一步解释。搜索网络将为您提供比我能提供的更为详尽的信息,并且为您提供了更好的资源。