diff --git a/packages/web-express/src/framework.ts b/packages/web-express/src/framework.ts index a9c2517d36b8..4f204e134ed2 100644 --- a/packages/web-express/src/framework.ts +++ b/packages/web-express/src/framework.ts @@ -96,7 +96,7 @@ export class MidwayExpressFramework extends BaseFramework< debug('[express]: use 404 not found middleware'); // eslint-disable-next-line this.app.use(function notFound(req, res, next) { - next(new httpError.NotFoundError()); + next(new httpError.NotFoundError(`${req.path} Not Found`)); }); debug('[express]: use global error handler middleware'); diff --git a/packages/web-express/test/index.test.ts b/packages/web-express/test/index.test.ts index d67697faa2d9..5d6308682dac 100644 --- a/packages/web-express/test/index.test.ts +++ b/packages/web-express/test/index.test.ts @@ -201,7 +201,7 @@ describe('/test/feature.test.ts', () => { .get('/11'); expect(result.status).toEqual(200); expect(result.body).toEqual({ - 'message': 'Not Found', + 'message': '/11 Not Found', 'status': 404 }); @@ -221,7 +221,7 @@ describe('/test/feature.test.ts', () => { .get('/11'); expect(result.status).toEqual(200); expect(result.body).toEqual({ - 'message': 'Not Found', + 'message': '/11 Not Found', 'status': 404 }); diff --git a/packages/web-koa/src/framework.ts b/packages/web-koa/src/framework.ts index 50e56a4322f1..3b1b9b899f84 100644 --- a/packages/web-koa/src/framework.ts +++ b/packages/web-koa/src/framework.ts @@ -24,7 +24,7 @@ import * as Router from '@koa/router'; import type { DefaultState, Middleware, Next } from 'koa'; import * as koa from 'koa'; import { Server } from 'net'; -import { setupOnerror } from './onerror'; +import { setupOnError } from './onerror'; const COOKIES = Symbol('context#cookies'); @@ -83,13 +83,13 @@ export class MidwayKoaFramework extends BaseFramework< }); const onerrorConfig = this.configService.getConfiguration('onerror'); - setupOnerror(this.app, onerrorConfig, this.logger); + setupOnError(this.app, onerrorConfig, this.logger); // not found middleware const notFound = async (ctx, next) => { await next(); - if (!ctx._matchedRoute) { - throw new httpError.NotFoundError(); + if (!ctx._matchedRoute && ctx.body === undefined) { + throw new httpError.NotFoundError(`${ctx.path} Not Found`); } }; diff --git a/packages/web-koa/src/onerror.ts b/packages/web-koa/src/onerror.ts index 1fbfa834486d..f6b0beaa0970 100644 --- a/packages/web-koa/src/onerror.ts +++ b/packages/web-koa/src/onerror.ts @@ -9,7 +9,7 @@ import { } from './utils'; import { Utils } from '@midwayjs/decorator'; -export function setupOnerror(app, config, logger) { +export function setupOnError(app, config, logger) { const errorOptions = Object.assign( { // support customize accepts function diff --git a/packages/web-koa/test/fixtures/base-app-middleware-router/package.json b/packages/web-koa/test/fixtures/base-app-middleware-router/package.json new file mode 100644 index 000000000000..621cdc6a4174 --- /dev/null +++ b/packages/web-koa/test/fixtures/base-app-middleware-router/package.json @@ -0,0 +1,3 @@ +{ + "name": "ali-demo" +} diff --git a/packages/web-koa/test/fixtures/base-app-middleware-router/src/config/config.default.ts b/packages/web-koa/test/fixtures/base-app-middleware-router/src/config/config.default.ts new file mode 100644 index 000000000000..eab7477dd13d --- /dev/null +++ b/packages/web-koa/test/fixtures/base-app-middleware-router/src/config/config.default.ts @@ -0,0 +1,9 @@ +'use strict'; + +export const keys = 'key'; + +export const hello = { + a: 1, + b: 2, + d: [1, 2, 3], +}; diff --git a/packages/web-koa/test/fixtures/base-app-middleware-router/src/configuration.ts b/packages/web-koa/test/fixtures/base-app-middleware-router/src/configuration.ts new file mode 100644 index 000000000000..5194070dc42e --- /dev/null +++ b/packages/web-koa/test/fixtures/base-app-middleware-router/src/configuration.ts @@ -0,0 +1,24 @@ +import { Configuration, App } from '@midwayjs/decorator'; +import { join } from 'path'; +import { Application } from '../../../../src'; + +@Configuration({ + imports: [ + require('../../../../src') + ], + importConfigs: [ + join(__dirname, './config') + ] +}) +export class ContainerConfiguration { + + @App() + app: Application; + + async onReady() { + this.app.useMiddleware(async (ctx, next) => { + ctx.body = 'abc'; + return await next(); + }); + } +} diff --git a/packages/web-koa/test/index.test.ts b/packages/web-koa/test/index.test.ts index ec6860331d31..9ec9ce65c6c9 100644 --- a/packages/web-koa/test/index.test.ts +++ b/packages/web-koa/test/index.test.ts @@ -288,7 +288,7 @@ describe('/test/feature.test.ts', () => { .get('/11'); expect(result.status).toEqual(200); expect(result.body).toEqual({ - 'message': 'Not Found', + 'message': '/11 Not Found', 'status': 404 }); @@ -333,4 +333,13 @@ describe('/test/feature.test.ts', () => { expect(result.status).toEqual(200); await closeApp(app); }); + + it('should test just exists middleware router and not throw error', async () => { + const app = await creatApp('base-app-middleware-router'); + const result = await createHttpRequest(app) + .get('/'); + expect(result.status).toEqual(200); + expect(result.text).toEqual('abc'); + await closeApp(app); + }); }); diff --git a/packages/web/src/framework/web.ts b/packages/web/src/framework/web.ts index d7019e207822..3ecf3b189e99 100644 --- a/packages/web/src/framework/web.ts +++ b/packages/web/src/framework/web.ts @@ -94,8 +94,8 @@ export class MidwayWebFramework extends BaseFramework< // not found middleware const notFound = async (ctx, next) => { await next(); - if (!ctx._matchedRoute) { - throw new httpError.NotFoundError(); + if (!ctx._matchedRoute && ctx.body === undefined) { + throw new httpError.NotFoundError(`${ctx.path} Not Found`); } }; // insert error handler