zoukankan      html  css  js  c++  java
  • Express中server和路由分离

    http://www.cnblogs.com/pigtail/archive/2013/01/14/2859297.html

    Express中server和路由分离

    当我新建一个express配置的应用时,会自动创建一套应用构架:

    其中:

    public放置静态的东西,css、image、js

    routes放置路由

    views放置模板

    看一下appjs

    var express = require('express') , routes = require('./routes') , user = require('./routes/user') , http = require('http') , path = require('path'); var app = express(); app.configure(function(){ app.set('port', process.env.PORT || 3000); app.set('views', __dirname + '/views'); app.set('view engine', 'ejs'); app.use(express.favicon()); app.use(express.logger('dev')); app.use(express.bodyParser()); app.use(express.methodOverride()); app.use(express.cookieParser('your secret here')); app.use(express.session()); app.use(app.router); app.use(express.static(path.join(__dirname, 'public'))); }); app.configure('development', function(){ app.use(express.errorHandler()); }); app.get('/', routes.index); app.get('/users', user.list); http.createServer(app).listen(app.get('port'), function(){ console.log("Express server listening on port " + app.get('port')); });

    如果应用多了配置也会很多,app.js就会显得很臃肿。当然需要routes和app.js分离。

    app.get('/', routes.index); app.get('/users', user.list); //app.get('/users/*', user.any); app.get(/^/users?(?:/(d+)(?:..(d+))?)?/, function(req, res){ res.send(req.params); }); app.get('/form', function(req, res){ res.render('form'); }); app.post('/formaction',function(req, res){ console.dir(req.body); res.redirect('back'); }); app.put('/formaction',function(req, res){ console.dir(req.body); res.redirect('back'); });

    方法是这样:

    app.js

    这样写,取代原来的routes配置:

    routes(app);//这里执行

    routes里这样写

    module.exports=function(app){ app.get('/',function(req,res){ res.render('index',{ title:'首页' }); }); //.......其它配置 };

     当然,其它模块路由可以分开写

    users模块路由,可以写入routes下的users.js,内容:

    /* * GET users listing. */ module.exports = function(app){ app.get('/users', function(req, res){ res.send("respond with a resource"); }); app.get(/^/users?(?:/(d+)(?:..(d+))?)?/, function(req, res){ res.send(req.params); }); };

    app.js里可以这样调用

    //...... var users = require("./routes/users"); users(app); //......

    当然这样如果模块多了,同样会造成app.js臃肿。

    还有一种写法,就是在第一种方法的基础上修改,我们注意到var routes = require("./routes");默认引用的是routes下的index.js模块。可以以此做为全部路由的引用入口:

    var users = require("./users"), form = require("./form"); module.exports = function(app){ users(app); form(app); }

    app.js中修改如下

    var routes = require("./routes");

    routes(app); // users路由 //users(app); // form路由 //form(app);

  • 相关阅读:
    二叉树的存储方式以及递归和非递归的三种遍历方式
    java基础04 匿名内部类
    jvm007 jvm知识点总览
    jvm学习006 jvm内存结构分配
    java基础03 位运算符
    java基础02 数据类型转
    jvm005 从jvm的角度谈谈线程的实现
    Arcgis投影变换后图像变深的问题
    win 7 64位如何安装erdas 9.2
    Win7 64bit 成功安装ArcView3.X
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13313574.html
Copyright © 2011-2022 走看看