最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

如何在整个应用程序中访问一个文件的变量?

运维笔记admin11浏览0评论

如何在整个应用程序中访问一个文件的变量?

如何在整个应用程序中访问一个文件的变量?

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

  • 请求先调用中间件功能,最后再调用控制器
  • 控制器调用其他一些类并传递数据
  • 最近这些类调用查询文件以访问数据库

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

我发现了多种解决方案:

  • 使用global variables

  • 将实例添加到请求对象

  • 将实例添加到response locals

  • 将实例添加到app locals

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

((当前我唯一要传递的变量是数据库实例...)

回答如下:使用
service体系结构或

dependency注入。

服务架构方式:制作这样的目录结构:

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 
我个人更喜欢该服务
方法,因为它更具模块化和可读性。
发布评论

评论列表(0)

  1. 暂无评论