当前位置: 首页 > 面试题库 >

将公共变量传递到Node.js中单独的模块中的最佳方法是什么?

公子昂
2023-03-14
问题内容

我使用单独的路由器文件作为主应用程序和身份验证应用程序的模块。我无法获得将变量(数据库客户端)传递到路由器的最佳方法。我不想对其进行硬编码或将其传递给:

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孤立地看,我可以用假注入它appdatabasePARAMS和测试只有Routes代码本身。
  • 它将所有对象图布线都放在一个位置,即合成根(在本例中为server.js应用程序入口点)。这使您可以查看一个地方,以查看系统中的所有组件如何组合在一起。

我所见到的对此更好的解释之一是对 .NET 优秀著作 Dependency Injection的 作者Mark
Seeman的采访
。它同样适用于JavaScript,尤其是Node.js:通常用作经典服务定位器,而不仅仅是模块系统。 __require



 类似资料:
  • 问题内容: 目前,我在隐藏的输入字段中回显某些变量,并在需要时使用Javascript读取它们。 我和一个同事现在正在考虑使用PHP生成一个额外的Javascript文件,该文件仅包含Javascript的所有变量。这样,变量已经存在,HTML中没有多余的代码。 有什么好的方法可以将变量从PHP传递到Javascript?我们的解决方案听起来如何? 问题答案: 通用数据传递 JavaScript常

  • 问题内容: 我是 AngularJS的 新手, 并且喜欢到目前为止所看到的内容,尤其是模型/视图绑定。我想利用它来构建一个简单的“添加到购物篮”功能。 到目前为止,这是我的控制器: 这是我的HTML: 现在这可行,但是我高度怀疑这是在模型中创建新产品对象的正确方法。但是,这正是我完全缺乏AngularJS经验的地方。 如果不是这样做的话,什么是最佳实践? 问题答案: 您可以创建购物篮服务。通常在J

  • 问题内容: 我正在尝试将变量从node.js传递到我的HTML文件。 问题答案: 我发现我可以传递这样的变量

  • 问题内容: 当我在node.js模块中执行此操作时: 去哪儿了?我的意思是:在浏览器中(如果未在函数中执行或以其他方式执行) 如果我执行此操作: 然后可以在中找到它,但这不是我想要的。 问题答案: 与浏览器不同,浏览器默认情况下将变量分配给全局空间(即窗口),而在Node中, 除非您 将变量 明确 分配给module.exports, 否则 变量的作用域为模块(文件)。 实际上,当您运行或文件中的

  • 本文向大家介绍在JavaScript中声明多个变量的最佳方法是什么?,包括了在JavaScript中声明多个变量的最佳方法是什么?的使用技巧和注意事项,需要的朋友参考一下 当然,以下声明多个变量的方法更有效: 假设您需要添加,删除或更新变量,则可以轻松实现。 但是使用以下方法,您需要做更多更改。例如,在删除变量时,您需要删除分号。如果是第一个,则需要将var添加到第二个变量。

  • 我正在AmazonEC2上运行docker-container。目前我已将AWS凭据添加到DockerFile。你能告诉我这样做的最好方法吗?