繁体   English   中英

Lambda Error Regex对自定义错误的工作原理是什么?

[英]How exactly does Lambda Error Regex work for custom errors?

我知道Lambda代理集成,但是对Lambda自定义代理感到好奇。 为了捕获自定义错误,我将在Integration Response中定义与以下Lambda函数关联的正则表达式:

exports.handler = (event, context, callback) => {        
    ...
    // Error caught here:
    var myErrorObj = {
        errorType : "InternalServerError",
        httpStatus : 500,
        requestId : context.awsRequestId,
        trace : {
            "function": "abc()",
            "line": 123,
            "file": "abc.js"
        }
    }
    callback(JSON.stringify(myErrorObj));
};

根据doc :“当您的API方法与前面的Lambda函数集成时,API网关会收到具有以下有效负载的集成响应”

{
    "errorMessage": "{\"errorType\":\"InternalServerError\",\"httpStatus\":500,\"requestId\":\"e5849002-39a0-11e7-a419-5bb5807c9fb2\",\"trace\":{\"function\":\"abc()\",\"line\":123,\"file\":\"abc.js\"}}"
}

请注意, httpStatus\\":500内有一个反斜杠(我们称之为目标),因此从逻辑上讲Lambda Error Regex应该类似于.*httpStatus\\\\":500.* ,也就是说,它应该转义反斜杠,以便它可以抓住那个目标。 但是,此类正则表达式无法捕获错误,而是.*"httpStatus":500.*捕获错误。 后者的正则表达式通常会捕获术语httpStatus":500 。但这与文档相矛盾。换句话说,似乎API网关的正则表达式不扫描文档解释的字符串?因此,它到底要扫描什么?两者之间到底发生了什么?

{
    "errorMessage": "{\"errorType\":\"InternalServerError\",\"httpStatus\":500,\"requestId\":\"e5849002-39a0-11e7-a419-5bb5807c9fb2\",\"trace\":{\"function\":\"abc()\",\"line\":123,\"file\":\"abc.js\"}}"
}

这是API网关从Lambda接收的原始响应有效负载 这是一个JSON对象,包含您的errorMessage字符串,其中包含一个JSON对象(放置在该对象中)。 Lambda再次将JSON.stringify修改为有线响应,就像它设计的那样。

尝试直接解析有效负载是不合适的,因此,一旦将有效负载解码,就删除了JSON序列化的最外层,以便将正则表达式准确地应用于错误消息字符串,就像将其传递给回调一样。 反斜杠转义的引号是JSON-in-JSON的人工产物,在第一个解码步骤发生时将其删除。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM