我正在尝试从外部node.js应用程序调用lambda函数(即不在AWS上)。 我使用了来自AWS文档的代码示例,它非常适用于名义上的案例。 但是,如果出现错误,我的调用函数永远无法正确处理它。
我的调用代码如下:
// AWS.config before
var pullParams = {
FunctionName : 'myFunctionName',
InvocationType : 'RequestResponse',
LogType : 'None',
Payload : JSON.stringify({
"myParam" : params
})
};
var lambda = new AWS.Lambda();
lambda.invoke(pullParams, function(error, data) {
console.log("error value: " + error);
if (error) {
console.log("Error invoking AWS " + error);
// process error
} else {
// process payload
}
});
在我的lambda函数中,如果没有提供参数,则会引发错误并提供错误消息
exports.handler = (event, context, callback) => {
var params = event.myParam;
if (!params) {
var error = new Error("Appropriate error message");
callback(error);
// In Node ≥8, could also be expressed making handler `async` and `throw`ing here
}
else {
// do normal processing and create payload
callback(null, "Payload");
}
}
但是,在invoke
回调中,error
始终为null(即使lambda通过错误代码路径),并且在浏览错误代码路径时,data
包含errorMessage, errorType, stackTrace
个密钥。
我在这里缺少什么? invoke
的{{1}}绑定不应该填充aws-sdk
而不是让我检查error
吗?!
答案 0 :(得分:2)
我可以使用一种解决方法,例如测试收到的有效负载:
// if(invocationError){
if(data.FunctionError){< == null如果没有错误,"处理"如果返回错误
这在技术上有效,但它与我找到的每个代码片段不同。
答案 1 :(得分:0)
您可以通过检查数据来解决此问题。有效载荷中出现错误消息
var pullParams = {
FunctionName : 'myFunctionName',
InvocationType : 'RequestResponse',
LogType : 'None',
Payload : JSON.stringify({
"myParam" : params
})
};
var lambda = new AWS.Lambda();
lambda.invoke(pullParams, function(error, data) {
console.log("error value: " + error);
//data.Payload is returned as a string, to check it, turn into JSON object
let payload = JSON.parse(data.Payload);
if (error) {
console.log("Error invoking AWS " + error);
// process error
} else {
// process payload
// check for Lambda error
if(!payload.errorMessage) {
console.log(data.Payload);
} else {
//Lambda error
console.log(payload.errorMessage);
}
}
});
答案 2 :(得分:-1)
使用context.fail()而不是callback(err)来使处理程序失败