HTTPハンドラーを使用して、HTTPリクエストを効率的に処理できます。 関数が呼び出されると、function Computeは指定したハンドラーを使用してHTTPリクエストを処理します。 このトピックでは、Node.jsランタイム環境でのHTTPハンドラーの構造について説明し、Node.jsランタイム環境でのHTTPハンドラーの使用方法の例を示します。
HTTPハンドラー署名
次のサンプルコードは、Node.jsランタイム環境でのHTTPハンドラーの署名の例を示しています。 HTTPリクエストに応答する関数は1つだけ実装する必要があります。
exports.handler = (req, resp, context) => {
console.log("receive body: ", req.body.toString());
resp.setHeader("Content-Type", "text/plain");
resp.send('<h1>Hello, world!</h1>');
}
説明
handler
: HTTPハンドラーの名前。req
: HTTPリクエスト構造体。resp
: HTTPレスポンス構造体。context
: コンテキスト情報。 詳細は、「コンテキスト」をご参照ください。
HTTPリクエスト構造体
項目 | データ型 | 説明 |
headers | オブジェクト | HTTPクライアントによって送信されるキーと値のペアを格納します。 |
パス | String | HTTPパスを指定します。 |
queries | オブジェクト | クエリパラメーターのキーと値のペアをHTTPパスに格納します。 パラメーター値は、文字列または配列です。 |
method | String | HTTPメソッドを指定します。 |
clientIP | String | クライアントのIPアドレスを指定します。 |
url | String | リクエストのURLを指定します。 |
次のいずれかのフィールドを含む、またはx-fc-
で始まるヘッダーのキー
は無視されます。 したがって、キーをカスタマイズすることはできません。
接続数
keep-alive
HTTPレスポンス構造体
移動方法 | データ型 | 説明 |
response.setStatusCode(statusCode) | interger | ステータスコードを設定します。 |
response.setHeader(headerKey, headerValue) | String, String | レスポンスヘッダーを設定します。 |
response.de leteHeader(headerKey) | String | レスポンスヘッダーを削除します。 |
response.send(body) | Buffer、String、およびStream.Readable | レスポンス本文を送信します。 |
次のいずれかのフィールドを含む、またはx-fc-
で始まるheaderKey
は無視されます。 したがって、ヘッダーキーをカスタマイズすることはできません。
接続数
content-length
date
keep-alive
サーバー
アップグレード
制限事項
リクエスト制限
リクエストが次のいずれかの制限を超えると、システムはステータスコード400とエラーInvalidArgumentを返します。
項目
説明
HTTPステータスコード
エラーコード
headers
リクエストヘッダーのキーと値の合計サイズは8 KBを超えることはできません。
400
InvalidArgument
パス
リクエストパスとクエリパラメーターの合計サイズは4 KBを超えることはできません。
body
同期呼び出し要求の本体の合計サイズは32 MBを超えることはできません。 非同期呼び出し要求の本体の合計サイズは128 KBを超えることはできません。
レスポンスの制限
応答が次のいずれかの制限を超えると、システムはステータスコード502とエラーBadResponseを返します。
項目
説明
HTTPステータスコード
エラーコード
headers
レスポンスヘッダーのキーと値の合計サイズは8 KBを超えることはできません。
502
BadResponse
例: HTTPリクエストの詳細を取得し、本文を返します。
サンプルコード
module.exports.handler = function (request, response, context) {
// get request header
var reqHeader = request.headers
var headerStr = ' '
for (var key in reqHeader) {
headerStr += key + ':' + reqHeader[key] + ' '
};
// get request info
var url = request.url
var path = request.path
var queries = request.queries
var queryStr = ''
for (var param in queries) {
queryStr += param + "=" + queries[param] + ' '
};
var method = request.method
var clientIP = request.clientIP
var body = request.body
var respBody = new Buffer('requestHeader:' + headerStr + '\n' + 'url: ' + url + '\n' + 'path: ' + path + '\n' + 'queries: ' + queryStr + '\n' + 'method: ' + method + '\n' + 'clientIP: ' + clientIP + '\n' + 'body: ' + body + '\n')
response.setStatusCode(200)
response.setHeader('content-type', 'application/json')
response.send(respBody)
};
あなたが始める前に
手順
Function Computeコンソールにログインします。 左側のナビゲーションウィンドウで、[サービスと機能] をクリックします。
上部のナビゲーションバーで、リージョンを選択します。 [サービス] ページで、目的のサービスをクリックします。
[関数] ページで、[関数の作成] をクリックします。
ランタイム環境がNode.js 14.xのHTTP関数を作成します。 詳細については、「関数の作成」をご参照ください。
関数の詳細ページで、コードタブで、コードエディターに上記のサンプルコードを入力し、デプロイ をクリックします。
説明上記のサンプルコードでは、関数のハンドラーは
index.js
のhandler
メソッドです。 別のハンドラーを指定する場合は、実際のファイルとメソッドを使用します。 詳細については、「関数インスタンスのライフサイクルフック」をご参照ください。コードタブをクリックし、隣のアイコンテスト機能を選択し、ドロップダウンリストからテストパラメーターの設定 を選択します。
テストパラメーターの設定パネルで、クリック新しいテストイベントの作成または既存のテストイベントの変更次のパラメーターを設定し、OK をクリックします。
リクエスト名: カスタムリクエスト名を入力します。
リクエスト方法: POSTを選択します。
リクエストパス: Enter? foo=バー.
リクエスト本文: コードエディターにhello,fcと入力します。
テスト機能 をクリックします。
関数の実行後、クライアントのIPアドレスなどの情報が返された結果に含まれます。