Nodejs - 加载模块一次并在许多不同的文件中使用

时间:2017-03-19 03:24:43

标签: javascript node.js express

我的项目目录如下所示:

MyProject
    -app.js
    -routes
        -routeone
        -routetwo

在我的app.js文件中,它看起来像这样:

var express = require('express');
var app = express();
var myModule= require('myModule');
app.use(myModule());

var routeone = require('./routes/routeone');
var routetwo = require('./routes/routetwo');

app.use('/routeone', routeone);
app.use('/routetwo', routetwo);
.
.
.

每个路径文件看起来像这样:

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


router.post('/', urlencodedParser, function(req, res, next) {
    //Need to call myModule's createUser function. How do I call it here?
});
module.exports = router;

如您所见,我对myModule模块有依赖性。我需要在每个路由中调用此模块中的函数。将来可能会有更多路由。我想避免在每个路由文件中指定这个(调用require),因为将来如果我有数百个路由并且说模块现在接受我需要的每个文件的选项,并且因为这是手动的。有没有办法要求它一次(例如在app.js文件中),然后能够在任何地方使用它?

1 个答案:

答案 0 :(得分:1)

您可以编写路由模块,以便在创建期间(require call)注入其依赖项。我在下面添加了一个示例

route.js

module.exports = function(myModule, router, dep1, dep2){
router.post()
//use my module, dep1 and dep2

}

app.js

var mymodule = require('./myModule')
var dep1 = require('./dep1');
var dep2 = require('./dep2');
var router = express.Router();
var route = require('route')(mymodule, router, dep1, dep2);

更新 - 用于从route.js返回路由器实例

route.js

module.exports = function(myModule, dep1, dep2){
router.post()
//other router invocations
return router
}

在app.js

var customRouter = require('route')(mymodule, router, dep1, dep2);

customRouter将是路由器实例,因为在route.js中te调用的函数返回了什么