跳转到内容

entry.server

默认情况下,Remix 将为您生成 HTTP 响应。如果您想自定义此行为,可以运行 npx remix reveal 来生成优先的 app/entry.server.tsx(或.jsx)。此模块的 default 导出是一个函数,可让您创建响应,包括 HTTP 状态、标头和 HTML,让您完全控制生成标记并将其发送到客户端的方式。

此模块应使用带有当前请求的 contexturl<RemixServer> 元素呈现当前页面的标记。一旦 JavaScript 使用浏览器入口模块加载到浏览器中,此标记将(可选)重新水化。

处理数据请求

您可以导出可选的 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 渲染错误(可以忽略)还是异步渲染错误(必须处理)。
  • 有关示例,请参阅 Node 的默认 entry.server.tsx
  • 对于 renderToReadableStream,您可以在 onError 回调函数中处理这些错误
  • 有关示例,请参阅 Cloudflare 的默认 entry.server.tsx

抛出的响应

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