Skip to content

Commit ca257e2

Browse files
fixup! feat(web-fragments): add fragment fetch failing handling
address PR feedback
1 parent 06e897e commit ca257e2

File tree

3 files changed

+12
-10
lines changed

3 files changed

+12
-10
lines changed

e2e/pierced-react/functions/_middleware.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -28,15 +28,15 @@ const getGatewayMiddleware: ((devMode: boolean) => PagesFunction) & {
2828
routePatterns: ["/", "/_fragment/remix/:_*"],
2929
// Note: make sure to run the pierced-react-remix-fragment (with remix-serve)
3030
upstream: "http://localhost:3000",
31-
onFragmentFailedFetch: () => {
31+
onSsrFetchError: () => {
3232
return new Response(
3333
"<p id='remix-fragment-not-found'><style>#remix-fragment-not-found { color: red; font-size: 2rem; }</style>Remix fragment not found</p>",
3434
{ headers: [["content-type", "text/html"]] }
3535
);
3636
},
3737
});
3838

39-
getGatewayMiddleware._gatewayMiddleware = getPagesMiddleware(gateway, devMode);
39+
getGatewayMiddleware._gatewayMiddleware = getPagesMiddleware(gateway, devMode ? 'development' : 'production');
4040
return getGatewayMiddleware._gatewayMiddleware;
4141
};
4242

packages/web-fragments/src/gateway/fragment-gateway.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ export interface FragmentConfig {
3636
* @param failedRes the failed response (with a 4xx or 5xx status) or the thrown error
3737
* @returns the response to use for the document's ssr
3838
*/
39-
onFragmentFailedFetch?: (req: RequestInfo, failedResOrError: Response|unknown) => Response|Promise<Response>;
39+
onSsrFetchError?: (req: RequestInfo, failedResOrError: Response|unknown) => Response|Promise<Response>;
4040
}
4141

4242
type FragmentGatewayConfig = {

packages/web-fragments/src/gateway/pagesMiddleware.ts

+9-7
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ const fragmentHostInitialization = ({ content, classNames }: {content: string; c
77

88
export function getPagesMiddleware(
99
gateway: FragmentGateway,
10-
devMode: boolean,
10+
mode: "production" | "development" = "development"
1111
): PagesFunction<unknown> {
1212
return async ({ request, next }) => {
1313
/**
@@ -74,23 +74,25 @@ export function getPagesMiddleware(
7474
let fragmentRes: Response;
7575
let fragmentFailedResOrError: Response | unknown | null = null;
7676
try {
77-
fragmentRes = scriptRewriter.transform(await fetch(fragmentReq));
78-
if (fragmentRes.status >= 400 && fragmentRes.status <= 500) {
79-
fragmentFailedResOrError = fragmentRes;
77+
const response = await fetch(fragmentReq);
78+
if (response.status >= 400 && response.status <= 599) {
79+
fragmentFailedResOrError = response;
80+
} else {
81+
fragmentRes = scriptRewriter.transform(response);
8082
}
8183
} catch (e) {
8284
fragmentFailedResOrError = e;
8385
}
8486

8587
if (fragmentFailedResOrError) {
86-
if (matchedFragment.onFragmentFailedFetch) {
87-
fragmentRes = await matchedFragment.onFragmentFailedFetch(
88+
if (matchedFragment.onSsrFetchError) {
89+
fragmentRes = await matchedFragment.onSsrFetchError(
8890
fragmentReq,
8991
fragmentFailedResOrError
9092
);
9193
} else {
9294
fragmentRes = new Response(
93-
devMode
95+
mode === 'development'
9496
? `<p>Fetching fragment upstream failed: ${matchedFragment.upstream}</p>`
9597
: "<p>There was a problem fulfilling your request.</p>",
9698
{ headers: [["content-type", "text/html"]] }

0 commit comments

Comments
 (0)