當我新建一個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);