使用Node.js编写Lambda配合SAM查询DynamoDB判断用户名是否存在
Node.js Lambda 校验DynamoDB用户存在性修改方案
以下是修改后的可用代码,可直接适配你给出的event.json结构实现动态查询:
const AWS = require('aws-sdk'); const docClient = new AWS.DynamoDB.DocumentClient(); // 改造为接收用户名入参,动态生成查询参数 async function getUser(username){ const params = { TableName : 'Users', Key: { Username: username } } try { return await docClient.get(params).promise() } catch (err) { throw err } } exports.handler = async (event, context) => { try { // 从SAM传入的事件中读取要查询的用户名 const targetUser = event.Username; const queryResult = await getUser(targetUser); // 根据返回结果判断用户是否存在 const responseText = queryResult.Item ? "User exists" : "User does not exist"; return { statusCode: 200, body: JSON.stringify(responseText) } } catch (err) { return { statusCode: 500, error: err.message } } }
核心修改说明
- 移除了全局硬编码的查询参数,把查询方法改造为可接收用户名入参的通用方法,每次查询动态生成DynamoDB请求参数
- 直接从Lambda的
event入参读取你在event.json中定义的Username字段,实现不同查询需求复用同一段代码 - 新增存在性判断逻辑:DynamoDB的
get接口如果没有匹配到对应分区键的数据,返回结果不会包含Item属性,直接判断该属性是否存在即可得到用户是否存在的结果
注意事项
- 确保你的Lambda执行角色(SAM模板中定义的函数角色)绑定了允许
dynamodb:GetItem操作的权限策略,资源指向你的Users表,否则会触发权限报错 - 本地SAM测试如果访问线上DynamoDB,需要提前在本地环境配置好有权限的AWS凭证;如果使用本地DynamoDB实例,需要在初始化
DocumentClient时指定本地端点:
const docClient = new AWS.DynamoDB.DocumentClient({ endpoint: 'http://localhost:8000' });
内容的提问来源于stack exchange,提问作者newbie342
相关产品推荐
相关产品推荐

