簡體   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