【发布时间】:2019-05-27 14:55:29
【问题描述】:
我正在尝试编写一个使用 request-promise 库发出外部 https 请求的 Lambda 函数。这就是我所拥有的:
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 网关请求时,我看到:
2019 年 5 月 26 日星期日 16:59:21 UTC:由于配置错误,执行失败:Lambda 代理响应格式错误
我一直在尝试了解 Lambda 代理响应应该如何格式化,并且我假设我在回调或上下文方面遗漏了一些东西,但我无法弄清楚如何使它与 request-promise 库一起工作。
【问题讨论】:
-
期望是
return response;,而不是return JSON.stringify(response);。 Node.js 的 Lambda 将响应对象隐式字符串化为 JSON。
标签: amazon-web-services aws-lambda aws-serverless