Error handling: on non-error throw try to stringify if error is an object (#1113)
This commit is contained in:
parent
53bea20e79
commit
6baa41178d
2 changed files with 20 additions and 1 deletions
|
@ -5,6 +5,7 @@
|
||||||
* Module dependencies.
|
* Module dependencies.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
const util = require('util');
|
||||||
const createError = require('http-errors');
|
const createError = require('http-errors');
|
||||||
const httpAssert = require('http-assert');
|
const httpAssert = require('http-assert');
|
||||||
const delegate = require('delegates');
|
const delegate = require('delegates');
|
||||||
|
@ -105,7 +106,7 @@ const proto = module.exports = {
|
||||||
// to node-style callbacks.
|
// to node-style callbacks.
|
||||||
if (null == err) return;
|
if (null == err) return;
|
||||||
|
|
||||||
if (!(err instanceof Error)) err = new Error(`non-error thrown: ${err}`);
|
if (!(err instanceof Error)) err = new Error(util.format('non-error thrown: %j', err));
|
||||||
|
|
||||||
let headerSent = false;
|
let headerSent = false;
|
||||||
if (this.headerSent || !this.writable) {
|
if (this.headerSent || !this.writable) {
|
||||||
|
|
|
@ -185,5 +185,23 @@ describe('ctx.onerror(err)', () => {
|
||||||
|
|
||||||
assert.equal(removed, 2);
|
assert.equal(removed, 2);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('should stringify error if it is an object', done => {
|
||||||
|
const app = new Koa();
|
||||||
|
|
||||||
|
app.on('error', err => {
|
||||||
|
assert.equal(err, 'Error: non-error thrown: {"key":"value"}');
|
||||||
|
done();
|
||||||
|
});
|
||||||
|
|
||||||
|
app.use(async ctx => {
|
||||||
|
throw {key: 'value'}; // eslint-disable-line no-throw-literal
|
||||||
|
});
|
||||||
|
|
||||||
|
request(app.callback())
|
||||||
|
.get('/')
|
||||||
|
.expect(500)
|
||||||
|
.expect('Internal Server Error', () => {});
|
||||||
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
Loading…
Reference in a new issue