【问题标题】:How to achieve a three-step requiring process in node.js如何在 node.js 中实现三步请求流程
【发布时间】:2015-08-14 00:03:10
【问题描述】:

我正在努力将我的代码“模块化”成更小的部分。我知道如果我有不同的路由文件,我可以像这样使用它:

var apiUserRoutes = require('./app/routes/api/user')(app, express);
app.use('/api/user', apiUserRoutes);

var apiPostRoutes = require('./app/routes/api/post')(app, express);
app.use('/api/post', apiPostRoutes);

在每个文件中:

module.exports = function(app, express) {
    var router = express.Router();

    router.route('...')
    ...

    return router;
};

如果我们称之为两步需求过程,那么我想要实现的是一个三步需求过程。比如说,我们有以下项目结构:

-server.js
-app
---routes
-----api.js
-----someOtherRoutes.js
-----api
-------user.js
-------post.js
-------blog.js
-----someOtherRoutes
-------thing.js
-------item.js

我想将user.jspost.jsblog.js 引入api.jsthing.jsitem.js 引入someOtherRoutes.js,然后将api.jssomeOtherRoutes.js 引入主文件@987654 @。

【问题讨论】:

  • @Plato,我尝试了一种分两步的方法,我知道它是如何工作的,但我不想将所有 api 路由放在一个地方,因为它会变得混乱。如果我在app/routes/api/user.js 中导出路由器,并希望将app/routes/api.js 用于我的应用程序中的所有路由/api,例如GET app.dev/api/users,那么我不知道app/routes/api.js 文件中应该发生什么。显然,我需要在 modules.export 中从中导出一个路由器对象,但它会从 user.jsblog.js 等导入不同的路由器,所以我需要一些建议或思路如何 @987654342 @ 应该看起来像
  • 这看起来会变得非常混乱,特别是如果用户、帖子、博客等也需要访问app。我会转移到一个更扁平的 require 系统,例如我在此处发布的那个:stackoverflow.com/questions/31477523/… 使用该设置,您只需 require('../app') 在任何需要的地方。不过,您还必须根据需要它的文件的位置确保您的 app.js 路径正确。

标签: node.js express routes


【解决方案1】:

我建议你直接在 requires 中绑定路由。

// app.js
require('./app/routes/api.js')(app, express);

// api.js
module.exports = function(app, express){ ...
  // if user.js exports a function(req, res<, next>){} bind it:
  app.use('/api/user', require('./api/user.js'));

  // if post.js exports a function(app, express){} and binds by itself just run it:
  require('./api/post.js')(app, express);
};

【讨论】:

    【解决方案2】:

    好的,所以对于我的情况,我找到了以下解决方案:

    app/routes/api/user.js

    module.exports = function(app, express) {
        var router = express.Router();
    
        router.get('/test', function(req, res) {
            res.send('Test!');
        });
    
        return router;
    };
    

    app/routes/api/router.js

    var userRoutes = require('./user');
    
    module.exports = function(app, express){
        var router = express.Router();
    
        router.use('/users', userRoutes(app, express));
    
        return router
    };
    

    app/routes/routes.js

    var apiRoutes = require('./api/router');
    
    module.exports = function(app, express) {
        var router = express.Router();
    
        router.use('/api', apiRoutes(app, express));
    
        return router;
    };
    

    现在点击GET http://app.dev/api/users/test 我得到了想要的结果,所以基本上我通过router.use(...)user.js 和所有其他特定于api 的路由包含到主api-router 文件router.js 中,在具有特定前缀的所有其他路由中就像http://app.dev/someOtherRoute 我也可以这样做。然后我将每个子文件夹中的所有router.js 文件包含到主routes.js 中,然后我只将这个文件包含到我的server.js 中。对我来说似乎很干净。

    【讨论】:

      猜你喜欢
      • 2020-02-12
      • 2017-04-13
      • 1970-01-01
      • 1970-01-01
      • 2020-03-29
      • 1970-01-01
      • 1970-01-01
      • 2018-10-31
      • 2018-02-14
      相关资源
      最近更新 更多