我有一个NodeJS Express应用程序,它只在一个文件(app.js)中变得非常大.
我想将所有路由导出到一个外部文件中,比方说./lib/routes.js
.怎么做?
如何导出以下代码并在main中正确使用它app.js
?
app.get('/logout', function(req, res) {
res.render('logout', {
username: req.session.username
});
});
app.get('/dashboard', function(req, res) {
res.render('dashboard', {
username: req.session.username
});
});
app.get('/login', function(req, res) {
res.render('login', {
badLogin: false,
loginError: false
});
});
Run Code Online (Sandbox Code Playgroud)
Pet*_*ons 21
我所做的是按控制器分组我的路线.对于每一组相关路由(用户,购物车,等等),让我生活在一个控制器文件app/controllers/foo.js
,其中foo
是控制器的名字.在我的主要javascript服务器文件中(当前所有代码都存在),我require
按名称控制每个控制器然后调用它的setup
函数,传入我的express app
对象,并允许控制器添加它需要的任何路由.
['api', 'authorization', 'users', 'tests'].map(function(controllerName) {
var controller = require('./controllers/' + controllerName);
controller.setup(app);
});
Run Code Online (Sandbox Code Playgroud)
在每个控制器内部,我做了类似的事情:
exports.setup = function(app) {
app.get('/dashboard', function(req, res) {
res.render('dashboard', {
username: req.session.username
});
});
};
Run Code Online (Sandbox Code Playgroud)
为什么不这样做:
// logout.js
module.exports = function(req, res){
res.render('logout', {
username: req.session.username
});
});
// dashboard.js
module.exports = function(req, res){
res.render('dashboard', {
username: req.session.username
});
});
// login.js
module.exports = function(req, res){
res.render('login', {
badLogin: false,
loginError: false
});
});
// app.js
app.get('/logout', require('logout'));
app.get('/dashboard', require('dashboard'));
app.get('/login', require('login'));
Run Code Online (Sandbox Code Playgroud)
此外,您可以轻松地使用http://nodejs.org/docs/v0.4.8/api/fs.html#fs.readdir来遍历路径目录并以编程方式加载它们.
你甚至可以做一些......
module.exports.handler[] = {
method : 'get',
route : '/login',
action : res.render('login', {
badLogin: false,
loginError: false
});
}
Run Code Online (Sandbox Code Playgroud)
虽然我认为我会花一点时间考虑如何简化它.
归档时间: |
|
查看次数: |
7149 次 |
最近记录: |