Node.js學習(五) - express - Router

Node.js學習(五) - express.js - Router

這次我想要將controller資料,自動的建立他們相對的頁面連結設定,將要一套多用,不用浪費時間一條一條URL設定。

使用express.js的Router設定

將app.js精簡到只剩下

var express = require('express');
var port = 8088;

var app = express();

var server = app.listen(port, function () {
    var host = server.address().address
    var port = server.address().port
    console.log('Node.js web server at port '+port+' is running..');
});

var HelpRouter = require('./routes/Help');
var TestRouter = require('./routes/Test');
var ApiRouter = require('./routes/api');

app.use('/Help',HelpRouter);
app.use('/Test',TestRouter);
app.use('/api',ApiRouter);

最重要的是,一套多用的controller該怎麼使用

我在routers資料夾,有一個api.js 內容如下

var express = require('express');
var router = express.Router();

var folder = './controllers/';
fs = require('fs');

fs.readdir(folder, (err, files) => {
  files.forEach(file => {
	var controller = file.replace('.js','');
	
	if(controller!='Help' && controller!='Test'){
		var obj = require('../controllers/'+controller);
		for(var key in obj) {
			if(typeof obj[key] === 'function'){
				var aciton_url = '';
				
				if(controller=='Help' || controller=='Test'){
					continue;
				} else {
					action_url = '/'+controller+'/'+key;
				}
				
				router.post(action_url,function(req,res){
					var dirs = req.url.split('/');
					var action = dirs[dirs.length-1];
					obj[action](req,res);
				});
			}
		}
	}
  });
});

module.exports = router;

以後增加N個controller都不必自己再去設定url,

這樣會貼近我常用的PHP-CI的撰寫方式。