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');
* @param {Boolean} options.trustProxy trust some header data to be provided by proxy
* @param {Object} options.querystring alternate qs parser to use
*/
- constructor(logger = common.nullLogger, options = {}) {
+ constructor(logger = console, options = {}) {
common.setOptions(this, defaultOptions, options);
this.router = new Router(options);
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 {
* Parse rawBody as contentType into ctx.parsedBody.
* @param {string} contentType
* @param {object} ctx
- * @param {string|buffer}
+ * @param {string|buffer} rawBody
*/
parseBody(contentType, ctx, rawBody) {
const _scope = _fileScope('parseBody');
- if (!rawBody) {
- // 1.2.4 and earlier expected rawBody on context
- rawBody = ctx.rawBody;
- }
-
switch (contentType) {
case Enum.ContentType.ApplicationForm:
ctx.parsedBody = this.querystring.parse(rawBody);