我的项目目录看起来像这样:
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 模块。我需要在每条 route 调用此模块中的函数。将来我可能会有更多路线。我想避免在每个路由文件中指定这个(调用 require),因为将来如果我有数百个路由并说模块现在接受我需要对每个文件进行的选项,并且此后手动进行。有没有办法只需要一次(例如在 app.js 文件中),然后就可以在任何地方使用它?
最佳答案
您可以这样编写路由模块,以便在创建时(require call
)它们会注入(inject)依赖项。我在下面添加了一个示例
路由.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返回路由器实例
路由.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 中调用的函数返回的内容
关于javascript - Nodejs - 加载一次模块并在许多不同的文件中使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42882571/