Skip to content

Commit

Permalink
feat: error handler treat err.statusCode as the same as err.status (#…
Browse files Browse the repository at this point in the history
  • Loading branch information
vijaykrishnavanshi committed May 17, 2020
1 parent faeaff5 commit 0d2f421
Show file tree
Hide file tree
Showing 2 changed files with 48 additions and 4 deletions.
10 changes: 6 additions & 4 deletions lib/context.js
Expand Up @@ -143,16 +143,18 @@ const proto = module.exports = {
// force text/plain
this.type = 'text';

let statusCode = err.status || err.statusCode;

// ENOENT support
if ('ENOENT' === err.code) err.status = 404;
if ('ENOENT' === err.code) statusCode = 404;

// default to 500
if ('number' !== typeof err.status || !statuses[err.status]) err.status = 500;
if ('number' !== typeof statusCode || !statuses[statusCode]) statusCode = 500;

// respond
const code = statuses[err.status];
const code = statuses[statusCode];
const msg = err.expose ? err.message : code;
this.status = err.status;
this.status = err.status = statusCode;
this.length = Buffer.byteLength(msg);
res.end(msg);
},
Expand Down
42 changes: 42 additions & 0 deletions test/context/onerror.js
Expand Up @@ -100,6 +100,48 @@ describe('ctx.onerror(err)', () => {
.expect(200, () => {});
});

it('should set status specified in the error using statusCode', () => {
const app = new Koa();

app.use((ctx, next) => {
ctx.body = 'something else';
const err = new Error('Not found');
err.statusCode = 404;
throw err;
});

const server = app.listen();

return request(server)
.get('/')
.expect(404)
.expect('Content-Type', 'text/plain; charset=utf-8')
.expect('Not Found');
});

describe('when invalid err.statusCode', () => {
describe('not number', () => {
it('should respond 500', () => {
const app = new Koa();

app.use((ctx, next) => {
ctx.body = 'something else';
const err = new Error('some error');
err.statusCode = 'notnumber';
throw err;
});

const server = app.listen();

return request(server)
.get('/')
.expect(500)
.expect('Content-Type', 'text/plain; charset=utf-8')
.expect('Internal Server Error');
});
});
});

describe('when invalid err.status', () => {
describe('not number', () => {
it('should respond 500', () => {
Expand Down

0 comments on commit 0d2f421

Please sign in to comment.