首页 > 解决方案 > 如何将凭据传递给我的数据库连接类?

问题描述

我正在为大学项目构建小型 API,并且正在使用 NodeJS。在这种情况下,我使用的技术并不重要,问题更普遍。我有以下一组文件和类: Index.js 创建 RequestHandler 类的实例。RequestHandler 实例作为 PropertiesStorage 类的实例。最后,PropertiesStorage 有一个 DatabaseAccessor 的实例。

所有这些类都是我自己创建的,我想创建一些逻辑抽象层,我认为这是一种推荐的方法。DatabasaAccessor 使用数据库的提供者 SDK。这个 SDK 需要一些凭据(数据库 ID 等),所以我需要以某种方式将这些凭据传递给 DatabaseAccessor。我看到了两种解决方案,但我认为两者都不完美。凭证存储在 config.js 文件中。我的想法: 1. 在 DatabaseAccessor 中加载 config.js - 这似乎是一个很好的解决方案,但是 DatabaseAccessor 变得有点过于依赖这个文件的位置和结构,我认为这个类应该更可重用, 2.传递从 index.js 开始并以 DatabaseAccessor 结束的凭据(通过我的每个类的构造函数) - 我不喜欢这样,因为中间类与我的数据库实现紧密相连。同样,我希望每个类都是可重用的,即使我将来更改我的数据库提供程序或类型。我想要一个像 IDatabaseAccessor 这样的接口,并且它的每个实现都可能有一组不同的凭据。

你能给我什么建议?在这种情况下,我真的很想学习好的做法。我试图在互联网上找到一些解决方案,但我只发现了一些关于向 Jenkins 注入凭据的问题(我什至不知道它是什么)。

标签: node.jsoopcredentials

解决方案


通常.env(环境变量)用于存储敏感信息,例如数据库密码、secret_access_keys、app_ids 等。建议将这些信息加载到环境变量中server/app.js,然后在需要的地方使用process.env.VAR_NAME. .env因此,您可以在需要的地方加载server.js并使用它。看看微软的这个启动器它会给你一个关于使用的好主意。

您可以使用此包.env轻松加载。


推荐阅读