如何使整个应用程序都可以访问一个文件的变量?
How to make variables of one file accessible along the entire application?
我有一个节点 REST API 使用 Express 和 JavaScript。我创建了一个能够连接、断开和执行查询的 Database
class。我的 app.js(入口文件)创建了一个实例 database
并启动了 express 服务器。根据要求,我有以下流程:
- 请求调用中间件函数,最后调用控制器
- 控制器调用其他一些classes并传入数据
- 最后这些 classes 调用查询文件来访问数据库
查询文件本身需要访问数据库实例class。他们可以调用 query 函数并传入他们准备好的语句。我不确定如何将实例 database
从我的 app.js(入口文件)一直传输到那些查询文件。
我找到了多个解决方案:
使用global variables
将实例添加到请求对象
将实例添加到 response locals
将实例添加到 app locals
将变量从一个文件传输到整个应用程序的最佳方法是什么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 方式,因为它更加模块化和可读性。
我有一个节点 REST API 使用 Express 和 JavaScript。我创建了一个能够连接、断开和执行查询的 Database
class。我的 app.js(入口文件)创建了一个实例 database
并启动了 express 服务器。根据要求,我有以下流程:
- 请求调用中间件函数,最后调用控制器
- 控制器调用其他一些classes并传入数据
- 最后这些 classes 调用查询文件来访问数据库
查询文件本身需要访问数据库实例class。他们可以调用 query 函数并传入他们准备好的语句。我不确定如何将实例 database
从我的 app.js(入口文件)一直传输到那些查询文件。
我找到了多个解决方案:
使用global variables
将实例添加到请求对象
将实例添加到 response locals
将实例添加到 app locals
将变量从一个文件传输到整个应用程序的最佳方法是什么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 方式,因为它更加模块化和可读性。