如何在node.js中实现三步需求过程

时间:2015-08-13 14:25:24

标签: node.js express routes

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

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放入主文件server.js

2 个答案:

答案 0 :(得分:1)

我建议你直接在需求范围内绑定路由。

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

答案 1 :(得分:1)

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

应用程序/路由/ API / user.js的

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

    router.get('/test', function(req, res) {
        res.send('Test!');
    });

    return router;
};

应用程序/路由/ API / router.js

var userRoutes = require('./user');

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

    router.use('/users', userRoutes(app, express));

    return router
};

应用程序/路由/ 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我得到了所需的结果,所以基本上我通过user.jsrouter.js和所有其他api特定路由包含到主api-router文件router.use(...)中,在具有特定前缀的所有其他路由中,如http://app.dev/someOtherRoute我也可以这样做。然后,我将每个子文件夹中的所有router.js个文件都包含在主routes.js中,然后我只将此文件包含到我的server.js中。对我来说似乎很干净。