2017-01-13 3 views
1

Servelessフレームワーク1.5を使用しています。Servelessフレームワーク1.5のラムダ統合によるレスポンスヘッダー/ボディ/ステータスコードの変更

"lambda-proxy integration"を使用すると、レスポンスヘッダー/ボディ/ステータスコードを変更するのが非常に簡単です。

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

しかし、私は値PATH_INFO使用したいので、私は以下のようなserverless.ymlを使用: "ラムダ統合" を使用しなければならない設定PATH_INFO取得するには

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

。 また、レスポンスヘッダ/ボディ/ステータスコードを変更したいと思います。 これらの応答値を「ラムダ統合」で変更するには、どのように設定する必要がありますか?

よろしく、

==ポストスクリプト==

質問を提出した後、私は文書が見つかりました: 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'" 

Iは上記と同じ設定、および以下のようなコードhandler.jsする:ヘッダCONTENT_TYPE 'は画像/ PNG' にはならなかったものの

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

。 レスポンスヘッダーを動的に変更するにはどうすればよいですか?

答えて

1

path_info設定を取得するには、「ラムダ統合」を使用する必要があります。

あなたは使用してラムダプロキシの統合を使用してパスのパラメータにアクセスすることができます

event["pathParameters"]["id"] 

をちょうどあなたのラムダは、任意のパスパラメータなしで呼び出すことができるチャンスがあります場合は、最初event["pathParameters"] !== nullをチェックすることを忘れないでください。

+0

本当に?情報をありがとう、それは最近変更されましたか?私の記憶が貧弱でないならば、少なくともバージョン1.3ではlambda-proxyからPATH_INFOを使用できないと思う...ありがとう! – kochizufan

+0

私はそれが動作することを確認した..私はラムダの統合に苦労するために何度も過ごした、それは決してなかった..とにかくありがとう! – 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 
    }); 

1つの紛らわしい点は、 "応答テンプレートの$"と "ヘッダーマッピングの設定における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 
}); 
関連する問題