如何将凭据传递到我的数据库连接 class?
how to pass credentials to my database connection class?
我正在为大学项目构建小型 API,我正在使用 NodeJS。在这种情况下,我使用的技术并不重要,问题更为普遍。
我有以下一组文件和 classes:
Index.js 创建 RequestHandler 的实例 class。
RequestHandler 实例具有 PropertiesStorage class 的实例。
最后 PropertiesStorage 有一个 DatabaseAccessor 实例。
所有这些class都是我自己创建的,我想创建一些逻辑抽象层,我认为这是一个推荐的方法。 DatabasaAccessor 使用数据库的提供者 SDK。此 SDK 需要一些凭据(数据库 ID 等)
所以我需要以某种方式将这些凭据传递给 DatabaseAccessor。我看到了两种解决方案,但在我看来都不是完美的。凭据存储在 config.js 文件中。
我的想法:
1. 在 DatabaseAccessor 中加载 config.js - 这似乎是一个很好的解决方案,但是 DatabaseAccessor 变得有点过于依赖这个文件的位置和结构,我认为这个 class 应该更可重用,
2. 传递从 index.js 开始到 DatabaseAccessor 结束的凭据(通过我的每个 classes 的构造函数)——我不喜欢这样,因为中间的 classes 变成与我的数据库实现紧密相关。同样,我希望每个 class 都可以重复使用,即使我将来更改数据库提供程序或类型也是如此。我想要一个像 IDatabaseAccessor 这样的接口,它的每个实现可能都有一组不同的凭据。
你能给我什么建议?在这种情况下,我真的很想学习好的做法。
我试图在互联网上找到一些解决方案,但我只发现了一些关于向 Jenkins 注入凭据的问题(我什至不知道它是什么)。
通常.env
(环境变量)用于存储敏感信息,如数据库密码,secret_access_keys,app_ids等,建议将这些加载到环境变量中server/app.js
然后在需要的地方使用 process.env.VAR_NAME
直接使用它们。因此,您可以在 server.js
中加载 .env
并在任何需要的地方使用它。看看 this starter by Microsoft 它会让您对用法有一个很好的了解。
您可以使用 this package 轻松加载 .env
。
我正在为大学项目构建小型 API,我正在使用 NodeJS。在这种情况下,我使用的技术并不重要,问题更为普遍。 我有以下一组文件和 classes: Index.js 创建 RequestHandler 的实例 class。 RequestHandler 实例具有 PropertiesStorage class 的实例。 最后 PropertiesStorage 有一个 DatabaseAccessor 实例。
所有这些class都是我自己创建的,我想创建一些逻辑抽象层,我认为这是一个推荐的方法。 DatabasaAccessor 使用数据库的提供者 SDK。此 SDK 需要一些凭据(数据库 ID 等) 所以我需要以某种方式将这些凭据传递给 DatabaseAccessor。我看到了两种解决方案,但在我看来都不是完美的。凭据存储在 config.js 文件中。 我的想法: 1. 在 DatabaseAccessor 中加载 config.js - 这似乎是一个很好的解决方案,但是 DatabaseAccessor 变得有点过于依赖这个文件的位置和结构,我认为这个 class 应该更可重用, 2. 传递从 index.js 开始到 DatabaseAccessor 结束的凭据(通过我的每个 classes 的构造函数)——我不喜欢这样,因为中间的 classes 变成与我的数据库实现紧密相关。同样,我希望每个 class 都可以重复使用,即使我将来更改数据库提供程序或类型也是如此。我想要一个像 IDatabaseAccessor 这样的接口,它的每个实现可能都有一组不同的凭据。
你能给我什么建议?在这种情况下,我真的很想学习好的做法。 我试图在互联网上找到一些解决方案,但我只发现了一些关于向 Jenkins 注入凭据的问题(我什至不知道它是什么)。
通常.env
(环境变量)用于存储敏感信息,如数据库密码,secret_access_keys,app_ids等,建议将这些加载到环境变量中server/app.js
然后在需要的地方使用 process.env.VAR_NAME
直接使用它们。因此,您可以在 server.js
中加载 .env
并在任何需要的地方使用它。看看 this starter by Microsoft 它会让您对用法有一个很好的了解。
您可以使用 this package 轻松加载 .env
。