首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在Express中的多个文件中包含路由处理程序?

如何在Express中的多个文件中包含路由处理程序?
EN

Stack Overflow用户
提问于 2011-05-19 21:16:12
回答 13查看 258.6K关注 0票数 268

在我的NodeJS express应用程序中,我有app.js,它有一些常见的路由。然后在wf.js文件中,我想定义更多的路由。

如何让app.js识别wf.js文件中定义的其他路由处理程序?

简单的请求似乎不起作用。

EN

回答 13

Stack Overflow用户

回答已采纳

发布于 2011-05-19 22:05:39

如果您想将路由放在一个单独的文件中,例如routes.js,您可以这样创建routes.js文件:

代码语言:javascript
复制
module.exports = function(app){

    app.get('/login', function(req, res){
        res.render('login', {
            title: 'Express Login'
        });
    });

    //other routes..
}

然后,您可以通过以下方式从传递app对象的app.js请求它:

代码语言:javascript
复制
require('./routes')(app);

看一下这些示例:https://github.com/visionmedia/express/tree/master/examples/route-separation

票数 442
EN

Stack Overflow用户

发布于 2016-05-19 04:11:08

在Express 4.x中,您可以获取路由器对象的实例,并导入包含更多路由的另一个文件。您甚至可以递归地执行此操作,以便您的路由导入其他路由,从而允许您创建易于维护的URL路径。

例如,如果我的/tests端点已经有一个单独的路由文件,并且想要为/tests/automated添加一组新的路由,我可能希望将这些/automated路由分解到另一个文件中,以使我的/test文件更小且易于管理。它还允许您按URL路径将路由逻辑分组在一起,这真的很方便。

./app.js的内容

代码语言:javascript
复制
var express = require('express'),
    app = express();

var testRoutes = require('./routes/tests');

// Import my test routes into the path '/test'
app.use('/tests', testRoutes);

./routes/tests.js的内容

代码语言:javascript
复制
var express = require('express'),
    router = express.Router();

var automatedRoutes = require('./testRoutes/automated');

router
  // Add a binding to handle '/tests'
  .get('/', function(){
    // render the /tests view
  })

  // Import my automated routes into the path '/tests/automated'
  // This works because we're already within the '/tests' route 
  // so we're simply appending more routes to the '/tests' endpoint
  .use('/automated', automatedRoutes);
 
module.exports = router;

./routes/testRoutes/automated.js的内容

代码语言:javascript
复制
var express = require('express'),
    router = express.Router();

router
   // Add a binding for '/tests/automated/'
  .get('/', function(){
    // render the /tests/automated view
  })

module.exports = router;
票数 200
EN

Stack Overflow用户

发布于 2011-05-20 04:01:26

基于@ShadowCloud的示例,我能够动态地将所有路由包含在一个子目录中。

routes/index.js

代码语言:javascript
复制
var fs = require('fs');

module.exports = function(app){
    fs.readdirSync(__dirname).forEach(function(file) {
        if (file == "index.js") return;
        var name = file.substr(0, file.indexOf('.'));
        require('./' + name)(app);
    });
}

然后将路由文件放在routes目录中,如下所示:

routes/test1.js

代码语言:javascript
复制
module.exports = function(app){

    app.get('/test1/', function(req, res){
        //...
    });

    //other routes..
}

根据需要重复多次,最后在app.js中放置

代码语言:javascript
复制
require('./routes')(app);
票数 105
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6059246

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档