React Router v7 已發布。 查看文件
entry.server
本頁內容

entry.server

預設情況下,Remix 會為您處理產生 HTTP 回應。如果您想自訂此行為,您可以執行 npx remix reveal 來產生一個 app/entry.server.tsx(或 .jsx),它會優先執行。這個模組的 default 導出是一個函數,可讓您建立回應,包括 HTTP 狀態、標頭和 HTML,讓您完全控制標記的產生方式和傳送到用戶端的方式。

這個模組應使用帶有目前請求的 contexturl<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 的取消和競爭條件處理可能會導致大量請求被中止。

串流渲染錯誤

當您透過 renderToPipeableStreamrenderToReadableStream 串流您的 HTML 回應時,您自己的 handleError 實作只會處理在初始 Shell 渲染期間遇到的錯誤。如果您在後續的串流渲染期間遇到渲染錯誤,您將需要手動處理這些錯誤,因為 Remix 伺服器在那時已經傳送了回應。

  • 對於 renderToPipeableStream,您可以在 onError 回呼函數中處理這些錯誤。您需要在 onShellReady 中切換一個布林值,以便知道該錯誤是 Shell 渲染錯誤(可以忽略)還是非同步渲染錯誤(必須處理)。
  • 對於 renderToReadableStream,您可以在 onError 回呼函數中處理這些錯誤

拋出的回應

請注意,這不處理從您的 loader/action 函數拋出的 Response 實例。這個處理程式的目的是尋找您程式碼中導致意外拋出錯誤的錯誤。如果您正在偵測某個情境並在您的 loader/action 中拋出 401/404/等 Response,那麼這是您的程式碼處理的預期流程。如果您也希望記錄或將這些發送到外部服務,則應在您拋出回應時完成。

文件和範例根據 MIT