我遇到了这个问题,它源于一个无效的处理程序代码,看起来完全没问题:
exports.handler = (event, context) => {
return {
isBase64Encoded: false,
body: JSON.stringify({ foo: "bar" }),
headers: {
'Access-Control-Allow-Origin': '*',
},
statusCode: 200,
};
}
我从检查有点混乱的 API Gateway 响应日志中得到了提示:
> Endpoint response body before transformations: null
修复它的方法是
- 添加
async关键字(异步函数隐式返回一个Promise):
exports.handler = async (event, context) => {
return {
isBase64Encoded: false,
body: JSON.stringify({ foo: "bar" }),
headers: {
'Access-Control-Allow-Origin': '*',
},
statusCode: 200,
};
}
exports.handler = (event, context) => {
return new Promise((resolve) => resolve({
isBase64Encoded: false,
body: JSON.stringify({ foo: "bar" }),
headers: {
'Access-Control-Allow-Origin': '*',
},
statusCode: 200,
}));
}
exports.handler = (event, context, callback) => {
callback({
isBase64Encoded: false,
body: JSON.stringify({ foo: "bar" }),
headers: {
'Access-Control-Allow-Origin': '*',
},
statusCode: 200,
});
}
我的处理程序之前被声明为async,而从未使用await,因此我删除了async 关键字以降低代码的复杂性,而没有意识到Lambda 期望使用async/await/Promise 或回调返回方法。