带有请求承诺的 AWS Lambda
AWS Lambda with 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 网关请求时,我看到了:
5 月 26 日星期日 16:59:21 UTC 2019:由于配置错误导致执行失败:Lambda 代理响应格式错误
我一直在努力阅读 Lambda 代理响应的格式,我假设我遗漏了一些关于回调或上下文的内容,但我无法做到弄清楚如何让它与请求承诺库一起工作。
在代理集成中 API 网关只是在前端和后端之间传递整个请求和响应。
发送到 API 网关的响应 lambda 函数有问题。
对 lambda 的响应应具有以下内容 key-values
{
"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),
};
我正在尝试编写一个使用请求承诺库来发出外部 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 网关请求时,我看到了:
5 月 26 日星期日 16:59:21 UTC 2019:由于配置错误导致执行失败:Lambda 代理响应格式错误
我一直在努力阅读 Lambda 代理响应的格式,我假设我遗漏了一些关于回调或上下文的内容,但我无法做到弄清楚如何让它与请求承诺库一起工作。
在代理集成中 API 网关只是在前端和后端之间传递整个请求和响应。
发送到 API 网关的响应 lambda 函数有问题。
对 lambda 的响应应具有以下内容 key-values
{
"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),
};