主分支
分支
主分支 (2.15.2)开发版
版本
2.15.21.19.3v0.21.0
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