基于env var或逻辑要求节点模块是否可以接受?

时间:2015-09-24 21:10:24

标签: node.js

这似乎是一个奇怪的问题,但我正在构建一个模块,用于抽象出不同数据存储选项的某些逻辑。想法是任何使用该模块的人都可以将它与MongoDb或Redis或SQL一起使用或(在此处插入您想要的任何选项

我在每个实现中都有一个基本接口,通过为每个不同的数据存储选项导出相同的函数名称和签名。

现在我有helper = require(process.env.data_storage_helper)

之类的东西

然后可以以相同的方式使用帮助程序。

这是不好的做法,如果是这样,为什么?是否有更好或建议的方法来实现这种抽象?

1 个答案:

答案 0 :(得分:1)

这不是技术上不好的做法,但我实际上会添加一个间接级别。相反,将这些选项存储在配置文件中,这些选项基于NODE_ENV或其他环境变量进行挑选。然后在配置对象中使用相同的密钥,无论如何。使用此框架的一个很好的示例是kraken.js,它根据NODE_ENV自动加载配置文件。

然后你可以在Kraken启动后抓住配置对象的句柄(或者你最终使用的任何东西 - 它在底层使用confit - 你总是可以直接使用这个库),你可以抓住"data_storage_helper"键,查看您的商店在做出决策的存储模块中所支持的商店。

这种方法的最大优点是,现在如果您想要更改数据存储或其他模块的任何其他行为,您只需更新JSON文件即可。 : - )