AWS Serverless函数调用时event.first返回undefined问题求助
解决Serverless本地调用时event.first返回undefined的问题
嘿,我之前刚踩过这个坑,一下子就能帮你搞定!
问题出在Serverless Framework本地调用HTTP触发器函数的默认行为上:当你用sls invoke local -f hello -d '{"first":2}'命令传递JSON数据时,框架会模拟真实的HTTP请求结构,把你传入的JSON字符串放到event.body字段里,而不是直接作为event的顶层属性。所以你直接访问event.first自然会得到undefined——因为first藏在event.body这个JSON字符串里呢!
给你两种解决方案:
方案1:修改函数代码解析event.body(推荐,符合HTTP触发器的真实场景)
把代码改成先解析event.body里的JSON内容,再获取first值:
'use strict' module.exports.hello = (event, context, callback) => { // 解析event.body中的JSON字符串 const requestBody = JSON.parse(event.body); const first = requestBody.first; console.log("**", first); // 现在会输出2啦 const response = { statusCode: 200, body: JSON.stringify({ event: event, firstValue: first }), }; callback(null, response); }
方案2:调整调用命令(适合临时本地测试,跳过HTTP结构)
如果你只是想快速测试函数逻辑,不想模拟HTTP请求结构,可以在调用时加上--invoke-type Event参数,这样传入的JSON会直接作为event的顶层属性:
sls invoke local -f hello -d '{"first":2}' --invoke-type Event
不过这个方案只适合本地临时测试,因为真实的HTTP触发器场景下,数据还是会在event.body里,所以方案1更贴近生产环境的情况。
内容的提问来源于stack exchange,提问作者Trajce12
相关产品推荐
相关产品推荐

