Function Compute は、Node.js 関数によってスローされたエラーをキャッチし、構造化されたレスポンスを返します。このページでは、Node.js 関数が生成する可能性のある 2 種類のエラーカテゴリと、サービスからの HTTP ステータスコードの解釈方法について説明します。
エラーの種類
キャッチされた例外
関数が例外をスローすると、Function Compute はそれをキャッチし、3 つのフィールドを持つ JSON オブジェクトを返します。
| フィールド | 説明 |
|---|---|
errorMessage | エラーメッセージの文字列 |
errorType | JavaScript エラーのクラス名 |
stackTrace | スタックフレームの配列 |
ECMAScript モジュール
ECMAScript モジュールの構文には、Node.js 18 以降が必要です。サンプルコードはワンクリックデプロイメント (nodejs-fc-err-es) をサポートしています。export const handler = async (event, context) => {
throw new Error('oops');
};CommonJS モジュール
exports.handler = function(event, context, callback) {
throw new Error('oops');
};サンプルレスポンス:
{
"errorMessage": "oops",
"errorType": "Error",
"stackTrace": [
"Error: oops",
" at handler (file:///code/index.mjs:2:9)",
" at module.exports (file:///var/fc/runtime/nodejs20/bootstrap.mjs:5655:14)",
" at process.processTicksAndRejections (node:internal/process/task_queues:95:5)"
]
}異常終了
関数の実行中に process.exit() を呼び出すと、ランタイムは構造化されたエラーをキャッチできません。代わりに、サービスは一般的なメッセージを返します。
ECMAScript モジュール
ECMAScript モジュールの構文には、Node.js 18 以降が必要です。
export const handler = async (event, context) => {
process.exit(1);
};CommonJS モジュール
exports.handler = function(event, context, callback) {
process.exit(1);
};サンプルレスポンス:
{
"errorMessage": "Process exited unexpectedly before completing request (duration: 12ms, maxMemoryUsage: 0MB)"
}HTTP ステータスコード
重要
2xx レスポンスは、関数が成功したことを保証するものではありません。X-Fc-Error-Type レスポンスヘッダーを確認して、2xx ステータスコードで返される関数のエラーを検出してください。
関数呼び出しが失敗すると、Function Compute は HTTP ステータスコード、レスポンスボディ、そして関数レベルのエラーの場合は X-Fc-Error-Type レスポンスヘッダーを返します。これらのシグナルを調べて、コード内でエラーを処理したり、エンドユーザーに表示したりします。
| ステータスコード | 意味 |
|---|---|
| 2xx | Function Compute がリクエストを受信しました。レスポンスに X-Fc-Error-Type ヘッダーが含まれている場合、関数エラーが発生したことを示します。例えば、コード内でキャッチされなかった例外などです。 |
| 4xx (429 を除く) | 呼び出しを開始したクライアントが、無効なリクエストを送信しました。 |
| 429 | リクエストはスロットリングされました。 |
| 5xx | Function Compute で内部エラーが発生したか、関数の構成が無効であるか、リソースの問題が存在します。 |
呼び出しエラーと解決ステップの全リストについては、「エラー処理」をご参照ください。