检查DynamoDB表是否包含键并返回布尔值

时间:2018-12-05 15:49:48

标签: javascript amazon-dynamodb aws-sdk-nodejs

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

    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”的值在声明后也不会改变。我看过类似的问题,但这些问题都无法真正帮助我,或者至少可以解释为什么会这样。谢谢

1 个答案:

答案 0 :(得分:0)

首先,dynamoDb.get返回一个Promise。因此,您在诺言完成并返回之前就返回“存在”。我发现最好的方法和最干净的方法是使您的函数异步并等待promise的返回。

例如,

cmake_minimum_required(VERSION 3.12)
project(PistacheExample)

set(CMAKE_CXX_STANDARD 11)

############################
##      SOURCE FILES      ##
############################
add_executable(${PROJECT_NAME} src/main.cpp)

#####################################
##      HEADERS SEARCH PATHS       ##
##################################### 
set(PROJECT_INCLUDE_DIR "src/include")
set(PISTACHE_INCLUDE_DIR "libs/pistache/include")

set(HEADER_SEARCH_PATHS ${PROJECT_INCLUDE_DIR} ${PISTACHE_INCLUDE_DIR})

#####################################
##      LIBRARY SEARCH PATHS       ##
#####################################
set(PISTACHE_LIBRARY "${PROJECT_SOURCE_DIR}/libs/pistache/lib/libpistache.a")
set(EXTRA_LIBRARY "-pthread -lssl")

set(LIBRARIES_SEARCH_PATHS ${PISTACHE_LIBRARY} ${EXTRA_LIBRARY})

#######################################
##      ADDING HEADERS LIBRARY       ##
#######################################
include_directories(${HEADER_SEARCH_PATHS})
target_link_libraries(${PROJECT_NAME} ${LIBRARIES_SEARCH_PATHS})