如何有效地分离路由代码

时间:2014-12-23 22:26:56

标签: node.js express

哑巴/新问题......

我正在学习/使用Node / Express4中的API,我想将我的路由分成另一个模块。我使用下面的代码,但是我继续使用 require('express')语句似乎很尴尬...有没有办法从中移动更多的代码routes.js文件到server.js并仍然在路由模块中保留我的.get和.post语句?提前谢谢!

server.js:

'use strict';
var express = require('express');
var routes = require('./routes');

var app = express();

app.use('/api', routes);

app.listen(3000, function() {
    console.log('Listening);
});

routes.js

var express = require('express'); // how do I get rid of this line?
var router = express.Router(); // can I move this to server.js?

var apiRoute = router.route('');

apiRoute.get(function (req, res) {
    res.send('api GET request received');
});

module.exports = router; 

1 个答案:

答案 0 :(得分:2)

你走在正确的轨道上。每次需要时重用var express = require('express');语句实际上很酷。导入(需要)模块是模块化开发的基石,允许您在项目文件中保持关注点的分离。

就模块化添加路线而言:问题是routes.js具有误导性。

为了模块化地分离你的路线,你应该使用几个名为<yourResource>.js的模块。这些模块将包含所有路由代码以及任何其他配置或必要的功能。然后你将它们附加在app.js中:

var apiRoute = router.route('/api');
apiRoute.use('/<yourResource', yourResourceRouter);

例如,如果您有资源bikes

app.js或甚至模块api.js中:

var apiRoute = router.route('/api')
  , bikeRoutes = require('./bikes');
apiRoute.use('/bikes', bikeRoutes);

然后在bike.js:

var express = require('express');
var router = express.Router(); 

var bikeRoutes = router.route('/');

bikeRoutes.get(function (req, res) {
    res.send('api GET request received');
});

module.exports = bikeRoutes; 

从那里可以很容易地看出,你可以构建许多不同的资源并不断地嵌套它们。