AWS HTTP API网关Lambda处理程序的打字稿

时间:2020-05-26 14:51:34

标签: amazon-web-services aws-lambda aws-api-gateway aws-http-api

当前,我使用以下命令键入RestApi的lambda函数:

    async function readcsv(path) {
    return new Promise((resolve, reject) => {
        let csvdata = [];
        fs.createReadStream(path)
            .on('error', () => {
                // handle error
            })
            .pipe(csv())
            .on('data', (row) => {
                csvdata.push([evname,uid,data])
                console.log(csvdata)
            })
            .on('end', async() => {
                resolve (csvdata)
            })
    })
}

readcsv('filename.csv').then(data => {
    let token = jwt.sign({payload:data},secrete_key)
    axios.get(`${URL}?c=${comp_id}&jwt=${token}`).then(function(res){
        console.log(res.data)
    }).catch(e => {
        console.log(e)
    })
})

这不适用于新的AWS Gateway HTTP API,在该API中,可以使用import { APIGatewayProxyEvent, APIGatewayProxyResult } from 'aws-lambda'; export const handler = async (event: APIGatewayProxyEvent): Promise<APIGatewayProxyResult> => {} 来获取HTTP方法。

我还应该使用其他类型吗?

1 个答案:

答案 0 :(得分:2)

我还应该使用其他类型吗?

我不这么认为。 这些类型可通过DefinitelyTyped获得。 [1] 浏览有关“ aws-lambda”类型的一些问题,您会发现API网关类型不经常更新。 [2]

此外,API网关的有效负载格式版本已更改,请参见[3]:

有效载荷格式版本指定API网关发送给Lambda集成的数据的格式,以及API网关如何解释Lambda的响应。如果您未指定有效负载格式版本,则AWS管理控制台默认使用最新版本。如果使用AWS CLI,AWS CloudFormation或SDK创建Lambda集成,则必须指定payloadFormatVersion。支持的值为1.0和2.0。

我猜您正在使用的最新版本为 2.0 。 版本2.0提供了HTTP方法作为属性 requestContext.http.method

版本1.0提供HTTP方法作为属性 requestContext.httpMethod

解决方案

您可以1.)为新的有效负载格式版本编写类型,然后通过PR将其提交给DefinelyTyped,以用于软件包“ @ types / aws-lambda”;或2.)将API网关设置为使用版本1.0。 >

老实说,我不知道HTTP API是否可以使用有效载荷版本1.0。也许AWS会在新API上强制执行最新版本,因为不需要支持旧格式。

参考文献

[1] https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/types/aws-lambda/trigger/api-gateway-proxy.d.ts
[2] https://github.com/DefinitelyTyped/DefinitelyTyped/issues/38720#issuecomment-586051966
[3] https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-develop-integrations-lambda.html