Amazon web services AWS Lambda带请求承诺

Amazon web services AWS Lambda带请求承诺,amazon-web-services,aws-lambda,aws-serverless,Amazon Web Services,Aws Lambda,Aws Serverless,我正在尝试编写一个Lambda函数,它使用请求承诺库来发出外部https请求。这就是我所拥有的: exports.handler = async (event, context, callback) => { console.log("Starting call: " + event.queryStringParameters.filter); console.log("Decoded param: " + decodeURIComponent(event.queryStr

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

exports.handler = async (event, context, callback) => {
    console.log("Starting call: " + event.queryStringParameters.filter);
    console.log("Decoded param: " + decodeURIComponent(event.queryStringParameters.filter));
    var filter = JSON.parse(decodeURIComponent(event.queryStringParameters.filter));
    console.log("Filter: " + filter);
    var ingredients = filter.ingredients;
    var options = {
        uri: 'https://api.*****.com/search',
        qs: {
            app_id: '****',
            app_key: '*****',
            q: ingredients.join(' ')
        },
        json: true
    };
    console.log("Done calling stuff");

    rp(options)
        .then(function(recipes) {
            console.log('Response: ' + recipes);
            var recipesToReturn = [];

            recipes.hits.forEach(function(recipeHit) {
                recipesToReturn.push(objectMapper(recipeHit.recipe, recipeMap));
            });
            console.log('Recipes:', recipesToReturn);
            const response = {
                statusCode: 200,
                body: JSON.stringify(recipesToReturn),
            };
            return JSON.stringify(response);
        })
        .catch(function(err) {
            console.log('Error:', err)
            const response = {
            statusCode: 400,
            body: err,
            };
            return JSON.stringify(response);
        });
};
当我测试API网关请求时,我看到:

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


我一直在努力阅读Lambda代理响应的格式,我假设我在回调或上下文方面遗漏了一些东西,但是我还没有弄明白如何使它与请求承诺库一起工作。

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

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

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

{
    "isBase64Encoded": true|false,
    "statusCode": httpStatusCode,
    "headers": { "headerName": "headerValue", ... },
    "body": "..."
}
isBase64Encoded:如果不使用二进制数据,请将其设置为false

状态代码:是由API网关解释的HTTP响应

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

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

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

期望值为
返回响应
,而不是
返回JSON.stringify(响应)。Lambda for Node.js隐式地将响应对象字符串化为JSON。问题在于响应对象中的键周围没有引号。我一加上引号,就成功了。