Archivio per la categoria NodeJS
Webapi-like controllers in NodeJS+ExpressJS
Pubblicato da sierrodc in Javascript, NodeJS il ottobre 12, 2014
Lavorando su un progetto ~MEAN (MongoDB + ExpressJS + AngularJS + nodeJS) mi sono chiesto: “perchè non creare un modulo di registrazione custom dei controller simile a quella delle webapi di asp.net”? da qui è nato il seguente modulo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
var path = require('path'); var fs = require('fs'); var config = require('./config'); var _ = require('lodash'); var getControllersInServerFolder = function (serverFolder) { if (_.isEmpty(serverFolder)) { serverFolder = config.settings.controllersFolder; } var controllers = []; var fileSystemObjects = fs.readdirSync(serverFolder); //read folder content if (_.isArray(fileSystemObjects)) { _.forEach(fileSystemObjects, function (fso) { var fsoFullPath = path.join(serverFolder, fso); var fsoStat = fs.statSync(fsoFullPath); if (fsoStat.isFile() && fso.endsWith('controller.js')) { controllers.push(require(path.relative(__dirname, fsoFullPath))); } else if (fsoStat.isDirectory()) { _.union(controllers, getControllersInServerFolder(fsoFullPath)); } }); } return controllers; }; exports.getControllers = getControllersInServerFolder; |
Quindi nello startup del server nodejs:
1 2 3 |
_.forEach(require('controllers-manager')..getControllers(), function(controller) { server.use(controller.path, controller.router); // register route into expressjs }); |
Ora i controller sono tutti quei files definiti nella cartella config.settings.controllersFolder (o sottocartelle) che terminano con ‘controller.js’ e hanno tutti la seguente struttura:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
var express = require('express'); var router = express.Router(); //apply before any actions (check authorizations...) router.use(function(req, res, next) { next(); //go to next }); router.get('/message', function(req, res, next) { res.send({'Hello world'}); }); exports.path = '/api/sample'; exports.router = router; |
Facile, semplice e veloce.