我使用单独的路由器文件作为主应用程序和身份验证应用程序的模块。我无法获得将变量(数据库客户端)传递到路由器的最佳方法。我不想对其进行硬编码或将其传递给:
module.exports = function(app, db) {
也许是使用单例寄存器或使用全局db变量的最佳方法?
您对设计模式有什么经验?哪种方法最好,为什么?
我发现使用依赖注入来传递东西是最好的样式。确实看起来像您拥有的东西:
// App.js module.exports = function App() { }; // Database.js module.exports = function Database(configuration) { }; // Routes.js module.exports = function Routes(app, database) { }; // server.js: composition root var App = require("./App"); var Database = require("./Database"); var Routes = require("./Routes"); var dbConfig = require("./dbconfig.json"); var app = new App(); var database = new Database(dbConfig); var routes = new Routes(app, database); // Use routes.
这有很多好处:
require("databaseSingleton")
global.database
Routes
app
database
server.js
我所见到的对此更好的解释之一是对 .NET 优秀著作 Dependency Injection的 作者Mark Seeman的采访。它同样适用于JavaScript,尤其是Node.js:通常用作经典服务定位器,而不仅仅是模块系统。 __require
require