2017-01-13 26 views
1

我使用Serveless框架1.5。在Serveless框架中用lambda集成修改響應頭/正文/狀態碼1.5

使用「lambda-proxy集成」,修改響應頭/主體/狀態碼非常簡單。

callback(null, { 
    status: 200, 
    headers: { 
    'STRING_VALUE': 'STRING_VALUE' 
    }, 
    body: 'STRING_VALUE' 
}); 

但我想PATH_INFO值中使用,所以我用serverless.yml象下面這樣:

functions: 
    hello: 
    handler: handler.hello 
    events: 
    - http: 
     path: hello/{hi} 
     method: get 
     integration: lambda 
     request: 
      parameters: 
      paths: 
       hi: true 

要獲得PATH_INFO設置必須使用 「拉姆達一體化」。 但我也想修改響應頭/正文/狀態碼的迴應。 我應該如何設置以「lambda集成」修改這些響應值?

問候,

== ==後記

提交的問題後,我發現文件: https://serverless.com/framework/docs/providers/aws/events/apigateway/#lambda-integration

據此,身體可定製:

 response: 
      headers: 
      Content-Type: "'text/html'" 
      template: $input.path('$') 

但是,對於響應標題,文檔說:

 response: 
      headers: 
      Content-Type: integration.response.header.Content-Type 
      Cache-Control: "'max-age=120'" 

我使設置與上述相同,和代碼handler.js象下面這樣:

callback(null, { 
    header: {'Content-Type': 'image/png'} 
    }); 

雖然頭CONTENT_TYPE沒有成爲 '圖像/ PNG'。 如何動態修改響應頭?

回答

1

要獲得path_info設置,必須使用「lambda集成」。

您可以通過訪問使用lambda代理整合路徑參數:

event["pathParameters"]["id"] 

請記住檢查event["pathParameters"] !== null第一,如果有一個機會,你的拉姆達可以在沒有任何路徑參數來調用。

+0

真的嗎?感謝您的信息,它最近改變了?如果我的記憶力不好,我認爲至少1.3版本不能使用lambda代理中的PATH_INFO ...謝謝! – kochizufan

+0

我檢查了它的工作..我花了很多時間與lambda集成鬥爭,這不是意味着..無論如何謝謝! – kochizufan

2

,我發現我的問題由我自己的答案:

對於改變頭,serverless.yml設置必須是:

 response: 
     headers: 
      Content-Type: "integration.response.body.headers.Content-Type" 
     template: $input.path('$.body') 

和響應代碼必須是:

callback(null, { 
     headers: {'Content-Type': 'image/jpeg'}, 
     body: body 
    }); 

一個令人困惑的問題是,「響應模板中的$」和「頭文件映射設置中的integration.response.body」具有相同的含義。
因此,「$ .body」與「integration.response.body.body」相同。

要更改狀態碼,我們應該使用Error對象。

const status = err ? new Error('[404] Not found') : null; 
callback(status, { 
    headers: {'Content-Type': 'image/jpeg'}, 
    body: body 
});