From 55d72135731b3409380642b2d52515daaaecf7e2 Mon Sep 17 00:00:00 2001 From: Jimmy Jia Date: Wed, 26 Oct 2016 20:47:59 -0400 Subject: [PATCH] Move no-match handling out of resolver --- src/createBaseRouter.js | 8 ++++++++ src/resolveElements.js | 5 ----- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/src/createBaseRouter.js b/src/createBaseRouter.js index d8c62949..a1ff8469 100644 --- a/src/createBaseRouter.js +++ b/src/createBaseRouter.js @@ -43,6 +43,14 @@ export default function createBaseRouter({ routeConfig, matcher }) { const routes = getRoutes(routeConfig, match); const fullMatch = { ...match, routes, matcher, context: matchContext }; + if (!routes) { + // Immediately render a "not found" error if no routes matched. + this.setState({ + element: render({ ...fullMatch, error: new HttpError(404) }), + }); + return; + } + try { // ESLint doesn't handle for-await yet. // eslint-disable-next-line semi diff --git a/src/resolveElements.js b/src/resolveElements.js index aec2f3fb..b448b145 100644 --- a/src/resolveElements.js +++ b/src/resolveElements.js @@ -2,8 +2,6 @@ import isPromise from 'is-promise'; import React from 'react'; import warning from 'warning'; -import HttpError from './HttpError'; - const UNRESOLVED = {}; function checkResolved(value) { @@ -73,9 +71,6 @@ function createElements(match, Components, matchData) { export default async function* resolveElements(match) { const { routes } = match; - if (!routes) { - throw new HttpError(404); - } const Components = routes.map(route => ( route.getComponent ? route.getComponent(match) : route.Component