entry.server
デフォルトでは、Remix は HTTP レスポンスの生成を処理します。この動作をカスタマイズしたい場合は、npx remix reveal
を実行して、app/entry.server.tsx
(または .jsx
) を生成できます。これは優先されます。このモジュールの default
エクスポートは、HTTP ステータス、ヘッダー、HTML を含むレスポンスを作成できる関数であり、マークアップの生成とクライアントへの送信方法を完全に制御できます。
このモジュールは、現在のリクエストの context
と url
を使用して、<RemixServer>
要素を使用して現在のページのマークアップをレンダリングする必要があります。このマークアップは (オプションで)、ブラウザのエントリモジュール を使用して JavaScript がブラウザにロードされると、再水和されます。
handleDataRequest
データリクエストのレスポンスを変更できる、オプションの handleDataRequest
関数をエクスポートできます。これらは HTML をレンダリングせず、クライアント側の水和が完了したら、ローダーとアクションのデータをブラウザに返すリクエストです。
export function handleDataRequest(
response: Response,
{
request,
params,
context,
}: LoaderFunctionArgs | ActionFunctionArgs
) {
response.headers.set("X-Custom-Header", "value");
return response;
}
handleError
デフォルトでは、Remix は発生したサーバー側のエラーをコンソールにログ出力します。ロギングをより詳細に制御したい場合、またはこれらのエラーを外部サービスにレポートする場合、オプションの handleError
関数をエクスポートできます。これにより、制御権が与えられ (組み込みのエラーロギングが無効になります)。
export function handleError(
error: unknown,
{
request,
params,
context,
}: LoaderFunctionArgs | ActionFunctionArgs
) {
if (!request.signal.aborted) {
sendErrorToErrorReportingService(error);
console.error(formatErrorForJsonLogging(error));
}
}
リクエストが中止された場合は、一般的にログ出力しないようにしてください。Remix のキャンセルと競合状態の処理により、多くのリクエストが中止される可能性があります。
ストリーミングレンダリングエラー
renderToPipeableStream
または renderToReadableStream
を介して HTML レスポンスをストリーミングしている場合、独自の handleError
実装は、最初のシェルレンダリング中に発生したエラーのみを処理します。その後のストリーミングレンダリング中にレンダリングエラーが発生した場合、Remix サーバーはその時点ですでにレスポンスを送信しているため、これらのエラーを手動で処理する必要があります。
renderToPipeableStream
の場合、これらのエラーはonError
コールバック関数で処理できます。onShellReady
でブール値を切り替える必要があります。これにより、エラーがシェルレンダリングエラー (無視できます) か非同期レンダリングエラー (処理する必要があります) かがわかります。- 例については、Node のデフォルトの
entry.server.tsx
を参照してください。
- 例については、Node のデフォルトの
renderToReadableStream
の場合、これらのエラーはonError
コールバック関数で処理できます。- 例については、Cloudflare のデフォルトの
entry.server.tsx
を参照してください。
- 例については、Cloudflare のデフォルトの
スローされたレスポンス
これは、loader
/ action
関数からスローされた Response
インスタンスを処理しないことに注意してください。このハンドラの目的は、予期しないスローされたエラーが発生するコードのバグを見つけることです。シナリオを検出して loader
/ action
で 401/404/などの Response
をスローしている場合は、コードによって処理される予期されるフローです。これらのログを記録したり、外部サービスに送信したりする場合は、レスポンスをスローしたときに処理する必要があります。