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

标签 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 模块。我需要在每条 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/

相关文章:

node.js - 在 Express 中间件中使用 Monk/mongo 的有效、正确的方法是什么?

javascript - 从后端发送 JSON 到前端

javascript - 当Key包含两部分标识符时获取对象的长度

node.js - sequelize .create is not a function 错误

node.js:将请求路由到同一主机上的不同端口

json - Node JS : Conversion from JSON to CSV

javascript - For循环不创建Div

javascript - JQuery 滚动到下一个/上一个 div

javascript - Backbone Model 有条件地触发事件,View 听不到它

javascript - CSS Flex + 固定尺寸容器高度 + 由于溢出 :hidden 禁用部分绘制的元素