NodeJS之重构Express路由

来源:互联网 发布:c语言数据类型字节数 编辑:程序博客网 时间:2024/06/05 23:51

本人是学ASP.NET MVC出生,也用过Spring,所以对MVC模式并不陌生,刚开始接触node。经过一番实践,我们可以通过重构express自动生成的项目结构,实现像Java、ASP.NET那样便于管理URL映射。

其中,app.js中的配置如下

/** * Module dependencies. */var express = require('express'),    http = require('http'),    /*  route = require("./routes/router.js"),*/    path = require('path');var app = express();app.configure(function() {    app.set('port', process.env.PORT || 3000);    app.set('views', __dirname + '/views');    //指定视图引擎处理模块,jade    app.set('view engine', 'jade');    app.use(express.favicon());    app.use(express.logger('dev'));    //引用body-parse中间件,便于POST数据的解析    app.use(express.bodyParser());    app.use(express.methodOverride());    app.use(app.router);    // app.use({    //     secret: 'hubwiz app', //secret的值建议使用随机字符串    //     cookie: { maxAge: 60 * 1000 * 30 } // 过期时间(毫秒)    // });    //使用cookie    app.use(express.cookieParser());    //使用session    // app.use(require('express-session'));    //加入对静态文件的处理    app.use(express.static(path.join(__dirname, 'public')));    app.use(function(req, res, next) {        res.type("text/html");        res.status(404);        res.send("<h1>404-Not Found!</h1>");        next();    });});//引入错误中间件app.configure('development', function() {    app.use(express.errorHandler());});// app.get("/", function(req, res, next) {//     return next();// }, index.index);// app.get('/users', user.list);require('./routes/route.js')(app);将pp的实例传递给外部文件http.createServer(app).listen(app.get('port'), function() {    console.log("Express server listening on port " + app.get('port'));});

路由映射配置:

var index = require('../controller/index.js'),    user = require('../controller/user.js');//引入外部控制器module.exports = function() {    return {        "home": {            "url": "/",            "method": "get",            "handler": index.index        },        "user-get": {            "url": "/users",            "method": "get",            "handler": user.list        },        "user-post": {            "url": "/users",            "method": "post",            "handler": function(req, res) {                res.render("user", req.method);            }        }    }};

绑定路由映射:

var routes = require('./config.js')();module.exports = function(app) {    for (var item in routes) {        app[routes[item].method](routes[item].url, routes[item].handler);    };};//绑定路由映射


项目结构大致如图:



经过这样处理之后,每次我们增加新的控制器之后,只需要在config.js文件中配置路由名称即可,便于项目的维护与开发。

——以上内容大部分参考自《Node与Express开发》

0 0
原创粉丝点击