const common = require('./common');
const ContentNegotiation = require('./content-negotiation');
const Enum = require('./enum');
-const { DingusError, ResponseError } = require('./errors');
+const { DingusError, ResponseError, RouterNoMethodError, RouterNoPathError } = require('./errors');
const { extensionToMime } = require('./mime-helper');
const Router = require('./router');
const Template = require('./template');
try {
({ handler, handlerArgs } = this.router.lookup(req.method, pathPart, ctx));
} catch (e) {
- if (e instanceof DingusError) {
- switch (e.message) {
- case 'NoPath':
- handler = this.handlerNotFound.bind(this);
- break;
- case 'NoMethod':
- handler = this.handlerMethodNotAllowed.bind(this);
- break;
- default:
- this.logger.error(_scope, 'unknown dingus error', { error: e });
- handler = this.handlerInternalServerError.bind(this);
- }
+ if (e instanceof RouterNoPathError) {
+ handler = this.handlerNotFound.bind(this);
+ } else if (e instanceof RouterNoMethodError) {
+ handler = this.handlerMethodNotAllowed.bind(this);
+ } else if (e instanceof DingusError) {
+ this.logger.error(_scope, 'unknown dingus error', { error: e });
+ handler = this.handlerInternalServerError.bind(this);
} else if (e instanceof URIError) {
handler = this.handlerBadRequest.bind(this);
} else {
}
}
+class RouterError extends DingusError {
+ constructor(...args) {
+ super(...args);
+ delete this.stack;
+ }
+}
+
+class RouterNoPathError extends RouterError {
+}
+
+class RouterNoMethodError extends RouterError {
+}
+
module.exports = {
DingusError,
ResponseError,
+ RouterError,
+ RouterNoPathError,
+ RouterNoMethodError,
};
const { METHODS: httpMethods } = require('http');
const common = require('../common');
-const { DingusError } = require('../errors');
+const { DingusError, RouterNoPathError, RouterNoMethodError } = require('../errors');
const PathParameter = require('./path-parameter');
// Internal identifiers for route entries.
if ('*' in matchedPath[kPathMethods]) {
return matchedPath[kPathMethods]['*'];
}
- throw new DingusError('NoMethod');
+ throw new RouterNoMethodError();
}
ctx.unmatchedPath = pathParts;
- throw new DingusError('NoPath');
+ throw new RouterNoPathError();
}
const sinon = require('sinon'); // eslint-disable-line node/no-unpublished-require
const Router = require('../../lib/router');
const PathParameter = require('../../lib/router/path-parameter');
-const { DingusError } = require('../../lib/errors');
+const { DingusError, RouterNoPathError, RouterNoMethodError } = require('../../lib/errors');
const noExpectedException = 'did not get expected exception';
router.lookup(method, path, ctx);
assert.fail(noExpectedException);
} catch (e) {
- assert(e instanceof DingusError);
- assert.strictEqual(e.message, 'NoPath');
+ assert(e instanceof RouterNoPathError);
}
});
it('finds handler', function () {
router.lookup(method, path, ctx);
assert.fail(noExpectedException);
} catch (e) {
- assert(e instanceof DingusError);
- assert.strictEqual(e.message, 'NoMethod');
+ assert(e instanceof RouterNoMethodError);
}
});
it('does not lookup non-existent path', async function () {
router.lookup(method, path, ctx);
assert.fail(noExpectedException);
} catch (e) {
- assert(e instanceof DingusError);
- assert.strictEqual(e.message, 'NoPath');
+ assert(e instanceof RouterNoPathError);
}
});