AWS Lambda写入DynamoDB报Unexpected end of input错误如何解决
问题解决方案
1. 修复语法错误
当前代码触发SyntaxError: Unexpected end of input的直接原因是handler函数缺少闭合的}标记,JS解析器读取到代码末尾仍未找到匹配的闭合符号,直接抛出语法错误。
2. 修正DynamoDB参数格式
你使用的原始AWS.DynamoDB客户端要求所有属性必须显式指定数据类型,比如字符串类型需要写为{S: "属性值"},直接传入原生字符串会触发参数校验错误。建议改用AWS.DynamoDB.DocumentClient客户端,可自动完成JS类型到DynamoDB属性类型的映射,无需手动标注类型。
3. 适配Lambda异步执行逻辑
原代码用回调形式调用putItem方法,Lambda handler不会等待异步回调执行完成就会结束进程,会出现请求返回200但数据库写入操作还未执行的情况。改用async/await写法可保证写入操作完成后再返回响应。
4. 校验执行角色权限
确认Lambda绑定的执行角色已添加对应milos-Shop表的dynamodb:PutItem权限,否则即使代码正确也会写入失败。
修正后可直接运行的完整代码
const AWS = require('aws-sdk'); const docClient = new AWS.DynamoDB.DocumentClient({region: 'us-east-2'}); exports.handler = async (event) => { const params = { Item: { ShopId: "User_" + Math.random(), name: event.name, address: event.address, city: event.city }, TableName: "milos-Shop" }; try { const res = await docClient.put(params).promise(); console.log('写入成功', res); return { statusCode: 200, body: JSON.stringify({ success: true, data: res }) }; } catch (err) { console.error('写入失败', err); return { statusCode: 500, body: JSON.stringify({ success: false, error: err.message }) }; } };
内容的提问来源于stack exchange,提问作者Miloš Milutinov
相关产品推荐
相关产品推荐

