jenkins-bot has submitted this change and it was merged. ( 
https://gerrit.wikimedia.org/r/395656 )

Change subject: Fix: return not found wiki pages as 404s
......................................................................


Fix: return not found wiki pages as 404s

The wiki route may fail when requesting initial properties (page
content) due to the page being nonexistent. Report 404s to the user as
the not found page route instead of the generic error page.

Change-Id: Ifc9a530a53ddf517016b9c732388c617714df983
---
M package.json
M src/common/router/router.ts
2 files changed, 17 insertions(+), 9 deletions(-)

Approvals:
  Niedzielski: Looks good to me, approved
  jenkins-bot: Verified



diff --git a/package.json b/package.json
index f0604d8..8692537 100644
--- a/package.json
+++ b/package.json
@@ -104,7 +104,7 @@
   "bundlesize": [
     {
       "path": "dist/public/index.*.js",
-      "maxSize": "3.4KB"
+      "maxSize": "3.5KB"
     },
     {
       "path": "dist/public/runtime.*.js",
diff --git a/src/common/router/router.ts b/src/common/router/router.ts
index 38a5510..6030598 100644
--- a/src/common/router/router.ts
+++ b/src/common/router/router.ts
@@ -3,7 +3,7 @@
 import HttpResponse from "../http/http-response";
 import notFoundPage, { Props as NotFoundProps } from "../pages/not-found";
 import errorPage, { Props as ErrorProps } from "../pages/error";
-import { RedirectError } from "../http/fetch";
+import { ClientError, RedirectError, FetchError } from "../http/fetch";
 
 export interface RouteResponse<Props> {
   chunkName?: string;
@@ -54,7 +54,7 @@
   );
 }
 
-function respondNotFound(path: string) {
+function respondNotFound(path: string): Promise<RouteResponse<any>> {
   const props: NotFoundProps = { path };
   return Promise.resolve({
     status: notFoundPage.status,
@@ -63,29 +63,37 @@
   });
 }
 
-function respondError(error: Error) {
+function respondError(path: string, error: Error): Promise<RouteResponse<any>> 
{
   // Throw up RedirectErrors so that they can be handled by the server/client
   // appropriately
   if (error instanceof RedirectError) throw error;
 
+  if (error instanceof ClientError && error.status === 404) {
+    return respondNotFound(path);
+  }
+
   console.error(`${error.message}\n${error.stack}`); // eslint-disable-line 
no-console
+
+  const status = error instanceof FetchError ? error.status : errorPage.status;
   const props: ErrorProps = { error };
-  return { status: errorPage.status, Component: errorPage.Component, props };
+  return Promise.resolve({ status, Component: errorPage.Component, props });
 }
 
-export const newRouter = (
+export function newRouter(
   routes: Route<any>[],
   requestPageModule: RequestPageModule = requestPageModuleChunk
-) => {
+) {
   return {
     route(path: string): Promise<RouteResponse<any>> {
       for (const route of routes) {
         const params = route.toParams(path);
         if (params) {
-          return respond(requestPageModule, route, params).catch(respondError);
+          return respond(requestPageModule, route, params).catch(error =>
+            respondError(path, error)
+          );
         }
       }
       return respondNotFound(path);
     }
   };
-};
+}

-- 
To view, visit https://gerrit.wikimedia.org/r/395656
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: merged
Gerrit-Change-Id: Ifc9a530a53ddf517016b9c732388c617714df983
Gerrit-PatchSet: 4
Gerrit-Project: marvin
Gerrit-Branch: master
Gerrit-Owner: Niedzielski <[email protected]>
Gerrit-Reviewer: Jhernandez <[email protected]>
Gerrit-Reviewer: Niedzielski <[email protected]>
Gerrit-Reviewer: Sniedzielski <[email protected]>
Gerrit-Reviewer: jenkins-bot <>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to