entry.server
在本页

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 的取消和竞争条件处理会导致大量请求被中止。

流式渲染错误

当您通过 renderToPipeableStreamrenderToReadableStream 流式传输您的 HTML 响应时,您自己的 `handleError` 实现将只处理在初始外壳渲染期间遇到的错误。如果您在随后的流式渲染过程中遇到渲染错误,则需要手动处理这些错误,因为 Remix 服务器此时已经发送了响应。

  • 对于 `renderToPipeableStream`,您可以在 `onError` 回调函数中处理这些错误。您需要在 `onShellReady` 中切换一个布尔值,以便您知道错误是外壳渲染错误(可以忽略)还是异步渲染错误(必须处理)。
  • 对于 `renderToReadableStream`,您可以在 `onError` 回调函数中处理这些错误

抛出响应

请注意,这不会处理来自您的 `loader`/`action` 函数的抛出的 `Response` 实例。此处理程序的目的是查找代码中的错误,这些错误会导致意外的抛出错误。如果您正在检测某个场景并在您的 `loader`/`action` 中抛出一个 401/404/等的 `Response`,那么这是一个由您的代码处理的预期流程。如果您还想记录或将这些错误发送到外部服务,则应在您抛出响应时完成。

文档和示例在 MIT