@hicoder/express-core
Version:
Restful API exposure middleware for Express and Mongoose based framework. Provide Rest API automatically based on Mongoose schema. It can also work with angular-core to develop end to end MEAN stack web applications.
78 lines (71 loc) • 2.75 kB
JavaScript
const express = require('express');
const RestControllerP = require('./rest_controller');
const _setSchemaName = function(name) {
return function(req, res, next) {
req.meanRestSchemaName = name;
return next();
}
}
const RestRouter = function(restController, schemaName, authzFunc, api, filters, zInterfaces) {
let router = express.Router();
if (!api) return router;
let setSchemaName = _setSchemaName(schemaName);
let name = schemaName.toLowerCase();
router.use(setSchemaName);
if (authzFunc) router.use(authzFunc);
if (api.includes('L')) {
router.get('/', restController.getAll.bind(restController));
router.post('/mddsaction/getfieldvalues', restController.PostActions.bind(restController));
router.post('/mddsaction/get', restController.PostActions.bind(restController));
}
let idParam = name + 'Id';
if (api.includes('R')) {
router.get('/:' + idParam, restController.getDetailsById.bind(restController));
}
if (api.includes('C')) {
let middlewares = [];
if (filters.create) {
middlewares = middlewares.concat(filters.create);
}
middlewares.push(restController.Create.bind(restController));
router.put('/', middlewares);
if (zInterfaces.create) {
for (let itf of zInterfaces.create) {
const setZInterfacename = function(req, res, next) {
req.zInterface = {
name: itf.name,
action: 'create',
};
next();
}
let middlewares = [setZInterfacename, restController.zInterfaceCall.bind(restController)];
router.post(`/mddsaction/put-z/${itf.name}`, middlewares);
}
}
}
if (api.includes('U')) {
let middlewares = [];
if (filters.update) {
middlewares = middlewares.concat(filters.update);
}
middlewares.push(restController.Update.bind(restController));
router.post('/:' + idParam, middlewares);
router.get('/mddsaction/post/:' + idParam, restController.getDetailsById.bind(restController));
}
if (api.includes('D')) {
router.delete('/:' + idParam, restController.HardDeleteById.bind(restController));
router.post('/mddsaction/delete', restController.PostActions.bind(restController));
}
if (api.includes('A')) { // archive
router.post('/mddsaction/archive', restController.PostActions.bind(restController));
router.post('/mddsaction/unarchive', restController.PostActions.bind(restController));
}
if (api.includes('E')) { // export
router.post('/mddsaction/export', restController.PostActions.bind(restController));
}
if (api.includes('M')) { // emailing
router.post('/mddsaction/emailing', restController.PostActions.bind(restController));
}
return router;
}
module.exports = RestRouter