Skip to content

Commit 82a5d5e

Browse files
authored
feat: add ssr fallback flag info to response header (#6137)
Co-authored-by: chenqinhui <chenqinhui@bytedance.com>
1 parent 553924c commit 82a5d5e

File tree

1 file changed

+10
-6
lines changed
  • packages/server/core/src/plugins/render

1 file changed

+10
-6
lines changed

packages/server/core/src/plugins/render/render.ts

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -125,10 +125,13 @@ export async function createRender({
125125
},
126126
) => {
127127
const forMatchpathname = matchPathname ?? getPathname(req);
128-
129128
const [routeInfo, params] = matchRoute(router, forMatchpathname);
129+
const framework = metaName || 'modern-js';
130+
const fallbackHeader = `x-${cutNameByHyphen(framework)}-ssr-fallback`;
131+
let fallbackReason = null;
130132

131133
const onFallback = async (reason: FallbackReason, error?: unknown) => {
134+
fallbackReason = reason;
132135
return onFallbackFn?.(reason, { logger, reporter, metrics }, error);
133136
};
134137

@@ -154,7 +157,7 @@ export async function createRender({
154157

155158
const renderMode = await getRenderMode(
156159
req,
157-
metaName || 'modern-js',
160+
fallbackHeader,
158161
routeInfo.isSSR,
159162
forceCSR,
160163
nodeReq,
@@ -227,7 +230,10 @@ export async function createRender({
227230
default:
228231
throw new Error(`Unknown render mode: ${renderMode}`);
229232
}
230-
233+
// inject ssr fallback header info
234+
if (fallbackReason) {
235+
response.headers.set(fallbackHeader, `1;reason=${fallbackReason}`);
236+
}
231237
return response;
232238
};
233239
}
@@ -313,16 +319,14 @@ async function renderHandler(
313319

314320
async function getRenderMode(
315321
req: Request,
316-
framework: string,
322+
fallbackHeader: string,
317323
isSSR?: boolean,
318324
forceCSR?: boolean,
319325
nodeReq?: IncomingMessage,
320326
onFallback?: (reason: FallbackReason, err?: unknown) => Promise<void>,
321327
): Promise<'ssr' | 'csr' | 'data'> {
322328
const query = parseQuery(req);
323329

324-
const fallbackHeader = `x-${cutNameByHyphen(framework)}-ssr-fallback`;
325-
326330
if (isSSR) {
327331
if (query.__loader) {
328332
return 'data';

0 commit comments

Comments
 (0)