You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
nodebb/src/routes/helpers.js

73 lines
1.9 KiB
JavaScript

'use strict';
const helpers = module.exports;
const middleware = require('../middleware');
const controllerHelpers = require('../controllers/helpers');
function _handleArgs(middleware, middlewares, controller) {
if (typeof middlewares === 'function') {
if (controller) {
middlewares = [middlewares];
} else {
controller = middlewares;
middlewares = [];
}
}
middlewares = [
middleware.maintenanceMode,
middleware.registrationComplete,
middleware.authenticateRequest,
middleware.pluginHooks,
...middlewares,
];
return { middlewares, controller };
}
helpers.setupPageRoute = function (router, name, middleware, middlewares, controller) {
({ middlewares, controller } = _handleArgs(middleware, middlewares, controller));
middlewares.push(middleware.pageView);
router.get(
name,
middleware.busyCheck,
middleware.applyCSRF,
middlewares,
middleware.buildHeader,
helpers.tryRoute(controller)
);
router.get(`/api${name}`, middlewares, helpers.tryRoute(controller));
};
helpers.setupAdminPageRoute = function (router, name, middleware, middlewares, controller) {
router.get(name, middleware.admin.buildHeader, middlewares, helpers.tryRoute(controller));
router.get(`/api${name}`, middlewares, helpers.tryRoute(controller));
};
helpers.setupApiRoute = function (router, verb, name, middlewares, controller) {
({ middlewares, controller } = _handleArgs(middleware, middlewares, controller));
router[verb](name, middlewares, helpers.tryRoute(controller, (err, res) => {
controllerHelpers.formatApiResponse(400, res, err);
}));
};
helpers.tryRoute = function (controller, handler) {
// `handler` is optional
if (controller && controller.constructor && controller.constructor.name === 'AsyncFunction') {
return async function (req, res, next) {
try {
await controller(req, res, next);
} catch (err) {
if (handler) {
return handler(err, res);
}
next(err);
}
};
}
return controller;
};