【问题标题】:HTTP request issue Internal Server errorHTTP 请求问题 内部服务器错误
【发布时间】:2019-01-25 23:52:31
【问题描述】:

我的 HTTP 响应出现问题,给我一个状态代码:502,错误消息:内部服务器错误。我的设置是一个用 NodeJS 编写的 AWS Lambda,它向与另一个 Lambda 集成的 AWS API 网关发出 HTTPS POST 请求,作为其后端。

奇怪的是,作为 API 后端的 Lambda 可以很好地接收所有 POST 请求,并且能够完美地执行其功能,但它的回调以错误响应另一个 Lambda。

下面是 API Gateway 端 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 状态代码,那么一切正常。

【问题讨论】:

  • 您的 API Lambda 有一些错误,您需要调试它。检查日志。见:docs.aws.amazon.com/lambda/latest/dg/…
  • 首先,检查 Cloudwatch 上的错误。接下来,检查您的映射模板(如果您没有使用 Lambda-Proxy 集成)。

标签: node.js amazon-web-services lambda https aws-api-gateway


【解决方案1】:

我在您的代码中看到的问题是,如果 err.code 为空或无效值,那么您将在 API Gateway 上获得 502。您需要修复代码,以便它发送回具有有效状态代码的有效 http 响应。

如果您的状态码无效或为空,那么它将向调用者抛出 502,因为来自 lambda 的 http 响应无效。

希望对你有帮助。

【讨论】:

    【解决方案2】:

    问题现已修复。无需更改代码,但问题是 API 网关端的 Lambda 的 Node.Js 源文件需要使用必要的依赖项或 node_modules 进行压缩,如此处所述http://docs.aws.amazon.com/lambda/latest/dg/nodejs-create-deployment-pkg.html

    【讨论】:

      【解决方案3】:

      我在从 lambda 函数调用外部 API 时遇到了类似的问题,即出现内部服务器错误。 之前 lambda 函数的 超时6 秒,而我增加到大约 25 秒。之后一切正常。 Nodejs 在获取 API 响应之前是异步的,下一行正在执行,而与使用异步等待无关。

      【讨论】:

        猜你喜欢
        • 2019-07-31
        • 1970-01-01
        • 1970-01-01
        • 2019-04-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-07-21
        相关资源
        最近更新 更多