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);

  • 相关阅读:
    [Node.js] Availability and Zero-downtime Restarts
    [Node.js] Load balancing a Http server
    [Node.js] Child Process with fork() to handle heavy calculation process
    [Algorithm] Write your own Math.pow function in Javascript, using Recursive approach
    [Functional Programming] Fst & Snd, Code interview question
    [React GraphQL] Pass Parameters to urql's useQuery React Hook
    [Algorithm] Find first missing positive integer
    [Algorithm] Serialize and Deserialize Binary Tree
    [Algorithm] Count Negative Integers in Row/Column-Wise Sorted Matrix
    paip.c++ qt 共享库dll的建立
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13313574.html
Copyright © 2011-2022 走看看