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

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM