javascript - 如何使一个文件的变量在整个应用程序中都可以访问?
问题描述
我有一个使用 Express 和 JavaScript 的 Node REST API。我创建了一个Database
能够连接、断开连接和执行查询的类。我的 app.js(入口文件)创建了一个实例database
并启动了快速服务器。根据请求,我有以下流程:
- 请求调用中间件函数,最后调用控制器
- 控制器调用其他一些类并传入数据
- 最后这些类调用查询文件来访问数据库
查询文件本身需要访问数据库类的实例。他们可以调用查询函数并传入他们准备好的语句。我不确定如何将实例database
从我的app.js(入口文件)一直传输到这些查询文件。
我找到了多种解决方案:
将变量从一个文件传输到整个应用程序的最佳方法/实践是什么?
解决方案
使用服务架构或依赖注入。
服务架构方式:
制作一个这样的目录结构:
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方式,因为它更加模块化和易读。
推荐阅读
- javascript - 嵌套函数中的同名变量
- c++ - 测试身份验证 desktop_app 时的 Firebase 内部错误
- node.js - throw new TypeError('app.use() 需要中间件函数'); 会话错误
- windows - 如何在 Windows 上使用 ssh 和 IPV6 连接到 GIT 远程存储库
- python - 从子进程中实时捕获标准输出和相机帧
- javascript - 将 Jquery 添加到 Vue-Cli 3
- git - 'git remote -v' 在本地删除不需要的存储库
- ruby - Ruby:如何判断一个对象是否是单例
- racket - 在 Racket 的迷你 kanren 库中,condi 在哪里?
- wordpress - 如何为我的 wordpress 网站创建一个真实的 ssl