默认情况下,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 服务器此时已经发送了响应。
entry.server.tsx
。entry.server.tsx
请注意,这不会处理来自您的 `loader`/`action` 函数的抛出的 `Response` 实例。此处理程序的目的是查找代码中的错误,这些错误会导致意外的抛出错误。如果您正在检测某个场景并在您的 `loader`/`action` 中抛出一个 401/404/等的 `Response`,那么这是一个由您的代码处理的预期流程。如果您还想记录或将这些错误发送到外部服务,则应在您抛出响应时完成。