From 2bee4be214b830ae5af633dc57de0384928dcfd4 Mon Sep 17 00:00:00 2001 From: Evan You Date: Wed, 13 Jan 2021 18:25:50 -0500 Subject: [PATCH] refactor: do not 404 in middleware mode --- packages/vite/src/node/server/index.ts | 12 ++++++----- .../vite/src/node/server/middlewares/error.ts | 21 ++++++++++++------- 2 files changed, 20 insertions(+), 13 deletions(-) diff --git a/packages/vite/src/node/server/index.ts b/packages/vite/src/node/server/index.ts index 9ea3e922e2388c..f57e19ad0a18d8 100644 --- a/packages/vite/src/node/server/index.ts +++ b/packages/vite/src/node/server/index.ts @@ -336,13 +336,15 @@ export async function createServer( app.use(indexHtmlMiddleware(server, plugins)) // handle 404s - app.use((_, res) => { - res.statusCode = 404 - res.end() - }) + if (!serverConfig.middlewareMode) { + app.use((_, res) => { + res.statusCode = 404 + res.end() + }) + } // error handler - app.use(errorMiddleware(server)) + app.use(errorMiddleware(server, serverConfig.middlewareMode)) if (httpServer) { // overwrite listen to run optimizer before server start diff --git a/packages/vite/src/node/server/middlewares/error.ts b/packages/vite/src/node/server/middlewares/error.ts index 8fbfb5fa518b7d..77beb47185732f 100644 --- a/packages/vite/src/node/server/middlewares/error.ts +++ b/packages/vite/src/node/server/middlewares/error.ts @@ -36,10 +36,11 @@ function cleanStack(stack: string) { } export function errorMiddleware( - server: ViteDevServer + server: ViteDevServer, + allowNext = false ): Connect.ErrorHandleFunction { // note the 4 args must be kept for connect to treat this as error middleware - return (err: RollupError, _req, res, _next) => { + return (err: RollupError, _req, res, next) => { const msg = buildErrorMessage(err, [ chalk.red(`Internal server error: ${err.message}`) ]) @@ -49,12 +50,16 @@ export function errorMiddleware( timestamp: true }) - res.statusCode = 500 - res.end(() => { - server.ws.send({ - type: 'error', - err: prepareError(err) - }) + server.ws.send({ + type: 'error', + err: prepareError(err) }) + + if (allowNext) { + next() + } else { + res.statusCode = 500 + res.end() + } } }