我遇到HTTP响应问题,给我一个状态代码:502,错误消息:内部服务器错误 . 我的设置是使用NodeJS编写的AWS Lambda,向作为其后端的另一个Lambda集成的AWS API Gateway发出HTTPS POST请求 .
奇怪的部分是Lambda充当API的后端接收所有POST请求就好并能够完美地执行其功能,但其回调响应其他Lambda并出现错误 .
下面是API网关侧lambda的回调
const done = (err, res) => callback(err, {
statusCode: err ? JSON.stringify(err.code) : '200',
body: err ? JSON.stringify(err.message) : JSON.stringify(res),
headers: {
'Content-Type': 'application/json',
}
});
这是来自另一个lambda的代码,它发出了一个https POST请求
const req = https.request(options, (res) => {
console.log('statusCode:', res.statusCode);
console.log('headers:', res.headers);
res.on('data', (d) => {
process.stdout.write(d);
});
res.on('end', function () {
console.log(JSON.stringify(body));
});
});
req.on('error', (e) => {
console.error(e);
console.log("request error");
});
req.write(JSON.stringify(payload));
console.log("req.end");
req.end();
我觉得问题出现在这些代码块中,因为如果我更改Lambda集成API网关的回调以将响应硬编码为200状态代码,那么一切正常 .
2 回答
问题现在已解决 . 不需要更改代码,但问题是API网关端的Lambda的Node.Js源文件需要使用必要的依赖项或node_modules压缩,如此处所述http://docs.aws.amazon.com/lambda/latest/dg/nodejs-create-deployment-pkg.html
我在您的代码中看到的问题是,如果
err.code
为空或值无效,那么您将在API网关上获得502 . 您需要修复代码,以便它发送回有效状态代码的有效http响应 .如果您的状态代码无效或为空,那么它将向调用者抛出502,因为来自lambda的http响应无效 .
希望能帮助到你 .