检查 DynamoDB table 是否包含键和 return 布尔值

Check if a DynamoDB table contains a key and return a boolean

我刚开始使用 Node.js 和 AWS DynamoDB,但我认为我遇到了一个非常基本的问题。如果 table 中存在特定键,我正在寻找一种方法 return 布尔值。所以这是我到目前为止的代码:

    const AWS = require('aws-sdk')
const TOKEN_TABLE = process.env.TOKENS_TABLE
const dynamoDb = new AWS.DynamoDB.DocumentClient()

module.exports = {
    isValid: function (token) {
        const params = {
            TableName: TOKEN_TABLE,
            Key:
            {
                token: token
            }
        }
  
        var exists = false
        dynamoDb.get(params, (error, result) => {
            if (result.Item)
                exists = true
            else
                exists = false
        })
    return (exists)
    }
}

当我调用这个函数时,'exists' 的值在声明后永远不会改变,即使我要查找的项目在 table 中也是如此。我看过类似的问题,其中 none 确实可以帮助我解决问题,或者至少可以解释为什么会发生这种情况。谢谢

首先,dynamoDb.getreturn是一个承诺。因此,您 return 'exists' 在您的承诺完成和 return 之前。我发现解决此问题的最佳方法和最简洁的方法是使您的函数异步并等待承诺的 return。

例如,

const AWS = require('aws-sdk')
const TOKEN_TABLE = process.env.TOKENS_TABLE
const dynamoDb = new AWS.DynamoDB.DocumentClient()

module.exports = {
    isValid: async function (token) {
        const params = {
            TableName: TOKEN_TABLE,
            Key:
            {
                token: token
            },
            AttributesToGet: [
               'token'
            ]
        }
  
        var exists = false
        let result = await dynamoDb.get(params).promise();
        if (result.Item !== undefined && result.Item !== null) {
          exists = true
        }

        return (exists)
    }
}