From 4fdb2a62c0ff694aa0b6bffaec3386a36d4334c9 Mon Sep 17 00:00:00 2001 From: Harry Chen Date: Fri, 4 Dec 2020 19:11:51 +0800 Subject: [PATCH] fix: ignore set body after user set status (#741) --- packages/web-koa/src/framework.ts | 4 +- .../fixtures/base-app/src/controller/case.ts | 41 +++++++++++++++++++ packages/web-koa/test/index.test.ts | 30 ++++++++++++++ 3 files changed, 73 insertions(+), 2 deletions(-) create mode 100644 packages/web-koa/test/fixtures/base-app/src/controller/case.ts diff --git a/packages/web-koa/src/framework.ts b/packages/web-koa/src/framework.ts index d111b64a911a..e13df4bca8e7 100644 --- a/packages/web-koa/src/framework.ts +++ b/packages/web-koa/src/framework.ts @@ -81,11 +81,11 @@ export abstract class MidwayKoaBaseFramework< const controller = await ctx.requestContext.getAsync(controllerId); // eslint-disable-next-line prefer-spread const result = await controller[methodName].apply(controller, args); - if (result) { + if (result !== undefined) { ctx.body = result; } - if (!ctx.body) { + if (ctx.body === undefined && !(ctx.response as any)._explicitStatus) { ctx.body = undefined; } diff --git a/packages/web-koa/test/fixtures/base-app/src/controller/case.ts b/packages/web-koa/test/fixtures/base-app/src/controller/case.ts new file mode 100644 index 000000000000..410c29c2dc7f --- /dev/null +++ b/packages/web-koa/test/fixtures/base-app/src/controller/case.ts @@ -0,0 +1,41 @@ +import { Get, Provide, Controller, Inject } from '@midwayjs/decorator'; + +@Provide() +@Controller('/case') +export class CaseController { + + @Inject() + ctx; + + @Get('/500') + async status500() { + this.ctx.status = 500; + } + + @Get('/500_1') + async status500_1() { + this.ctx.status = 500; + return ''; + } + + @Get('/204') + async status204() { + this.ctx.status = 204; + } + + @Get('/204_1') + async status204_1() { + this.ctx.status = 204; + return ''; + } + + @Get('/204_2') + async status204_2() { + } + + @Get('/204_3') + async status204_3() { + this.ctx.status = 500; + this.ctx.body = undefined; + } +} diff --git a/packages/web-koa/test/index.test.ts b/packages/web-koa/test/index.test.ts index 787e86c9982e..53df2a66b670 100644 --- a/packages/web-koa/test/index.test.ts +++ b/packages/web-koa/test/index.test.ts @@ -43,6 +43,36 @@ describe('/test/feature.test.ts', () => { const result = await createHttpRequest(app).get('/ctx-body'); expect(result.text).toEqual('ctx-body'); }); + + describe('test 500', function () { + it('test status 500', async () => { + const result = await createHttpRequest(app).get('/case/500'); + expect(result.status).toBe(500); + }); + + it('test status 500_1', async () => { + const result = await createHttpRequest(app).get('/case/500'); + expect(result.status).toBe(500); + }); + + }); + + describe('test 204', function () { + it('test status 204', async () => { + const result = await createHttpRequest(app).get('/case/204'); + expect(result.status).toBe(204); + }); + + it('test status 204_1', async () => { + const result = await createHttpRequest(app).get('/case/204_1'); + expect(result.status).toBe(204); + }); + + it('test status 204_2', async () => { + const result = await createHttpRequest(app).get('/case/204_2'); + expect(result.status).toBe(204); + }); + }); }); });