如何使整个应用程序都可以访问一个文件的变量?

How to make variables of one file accessible along the entire application?

我有一个节点 REST API 使用 Express 和 JavaScript。我创建了一个能够连接、断开和执行查询的 Database class。我的 app.js(入口文件)创建了一个实例 database 并启动了 express 服务器。根据要求,我有以下流程:

查询文件本身需要访问数据库实例class。他们可以调用 query 函数并传入他们准备好的语句。我不确定如何将实例 database 从我的 app.js(入口文件)一直传输到那些查询文件。

我找到了多个解决方案:

将变量从一个文件传输到整个应用程序的最佳方法是什么way/practice?

我见过的唯一解决此类问题的方法是使用依赖项注入。它仍在使用全局变量,但不是将它从一个 class 沿线扔到另一个 class ,您可以在应用程序运行时随时调用数据库连接的特定实例。

Use service architecture or dependency injection.

服务架构方式:

创建如下目录结构:

root (directory)
|
|-->app.js
|-->controllers (directory)
|-->services (directory)
      |
      |-> DatabaseService.js
      |-> XYZService.js
      |-> index.js

现在在您的 index.js 文件中 require 服务 类 和 export 那些 类 的实例,如下所示:

var Database =  require('./DatabaseService')
var XYZ = require('./XYZService')

module.exports = {
    database: new Database(),
    xyz: new XYZ()
}

现在,require 这些服务可在您的代码中任意放置,如下所示:

// SomeController.js
var database = require('../services').database

...
// DO WHATEVER YOU WANT WITH 'database' variable
...

依赖注入方式:

我假设您使用的是快速路线。通过将路由控制器包装在 lambda function 中来进行依赖注入,如下所示:

api.get('/user/:id', function (req, res) { // <-- wrapping 
   var database = new Database()
   return yourRouteController(req, res, database) // <-- Inject your database instance here
})

PS 我个人更喜欢 Service 方式,因为它更加模块化和可读性。