如何在Express中导出所有路由?

时间:2011-05-26 14:40:32

标签: node.js express

我有一个NodeJS Express应用程序在一个文件(app.js)中变得非常大。

我想将所有路由导出到一个外部文件中,比如./lib/routes.js。怎么做?

如何导出以下代码并在主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
    });
});

3 个答案:

答案 0 :(得分:21)

我所做的是通过控制器对我的路线进行分组。对于每组相关路线(用户,购物车等),我制作一个位于app/controllers/foo.js的控制器文件,其中foo是控制器名称。在我的主要javascript服务器文件中(当前所有代码都存在),我require按名称控制每个控制器,然后调用其setup函数,传入我的快速app对象,并允许控制器添加它需要的任何路线。

['api', 'authorization', 'users', 'tests'].map(function(controllerName) {
    var controller = require('./controllers/' + controllerName);
    controller.setup(app);
 });

在每个控制器中,我做了类似的事情:

exports.setup = function(app) {
    app.get('/dashboard', function(req, res) {
        res.render('dashboard', {
            username: req.session.username
        });
    });
};

答案 1 :(得分:7)

为什么不这样做:

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

此外,您可以轻松地使用http://nodejs.org/docs/v0.4.8/api/fs.html#fs.readdir循环遍历 routes 目录并以编程方式加载它们。

你甚至可以做一些......

module.exports.handler[] = {
    method : 'get',
    route  : '/login',
    action : res.render('login', {
       badLogin: false,
       loginError: false
    });
}

虽然我认为我会花一点时间考虑如何简化它。

答案 2 :(得分:0)

使用glob,您可以导出目录中的所有路由,例如“ / routes”:

  

npm i-保存glob

val dispatcher = Dispatcher(AsyncTask.THREAD_POOL_EXECUTOR as ExecutorService)
okHttpClientBuilder.dispatcher(dispatcher)

然后

  

在app.js上

IdlingResource