带有请求承诺的AWS Lambda

时间:2019-05-26 17:15:03

标签: amazon-web-services aws-lambda aws-serverless

我正在尝试编写一个Lambda函数,该函数使用request-promise库发出外部https请求。这就是我所拥有的:

import * as express from "express";
import {getConnection} from "typeorm";
import {MasterKategori} from "../entity/MasterKategori";

class HomeController {

    public home  = async (request: express.Request, response: express.Response) => {
        const kategoriData = await getConnection().getRepository(MasterKategori).find();
        const kategori = Object.entries(kategoriData);
        console.log(kategori);
        response.render("page", {kat: kategori});
    }
}

export default new HomeController();

当我测试API网关请求时,看到以下内容:

Sun May 26 16:59:21 UTC 2019:由于配置错误,执行失败:Lambda代理响应格式错误

我一直在尝试阅读应如何设置Lambda代理响应的格式,并且我假设我在回调或上下文方面缺少一些东西,但我一直无法弄清楚如何使其与请求承诺库一起使用。

1 个答案:

答案 0 :(得分:1)

在代理集成API中,网关仅在前端和后端之间传递整个请求和响应。

这是发送到API网关的响应lambda函数的问题。

对lambda的响应应具有以下键值

{
    "isBase64Encoded": true|false,
    "statusCode": httpStatusCode,
    "headers": { "headerName": "headerValue", ... },
    "body": "..."
}

isBase64Encoded :如果您不使用二进制数据,请将其设置为false。

statusCode :是API网关解释的HTTP响应。

body :如果要发送JSON,则必须将其转换为字符串。在node.js中,您可以使用JSON.stringify()方法。

以下可能是对API网关的正确响应

const response = {
                statusCode: 200,
                isBase64Encoded: false
                headers:""
                body: JSON.stringify(recipesToReturn),
            };