首页 > 解决方案 > 如何使一个文件的变量在整个应用程序中都可以访问?

问题描述

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

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

我找到了多种解决方案:

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

标签: javascriptnode.jsarchitecturesystem-design

解决方案


使用服务架构或依赖注入。

服务架构方式:

制作一个这样的目录结构:

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 函数中来进行依赖注入,如下所示:

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

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


推荐阅读