简介
Optional-conf 是一个用于处理 Node.js 程序配置的 npm 包。它可以帮助开发者更加方便地管理项目的配置信息,支持从多种来源获取配置,例如从环境变量、命令行参数、配置文件中读取信息,并且支持校验和转换配置项数据类型。
安装
使用 npm 进行安装:
npm install optional-conf
安装完成后,在项目中引入 optional-conf:
const optionalConf = require('optional-conf');
使用
使用 optional-conf 的第一步是定义配置项,在 optional-conf 中,一个配置项可以由四部分构成:
- key: 配置项的名称,可以是任何字符串。
- cli: 从命令行读入这个配置项的方式,默认是没有的,表示从命令行参数中不读入这个配置项的值。
- env: 从环境变量读入这个配置项的方式,默认是没有的,表示从环境变量中不读入这个配置项的值。
- default: 配置项的默认值,默认是没有的,表示如果命令行参数和环境变量中都没有这个配置项的值,那么就使用这个默认值。
下面的代码展示了如何定义一个配置项:
-- -------------------- ---- ------- ----- ------ - -------------- - ---- ---------- ---- ------- ---- ---------- -------- ------ -- - ---- -------------- ---- ----------- ---- ------------- - ---
在上面的代码中,我们定义了两个配置项,db_user
和 db_password
,其中 db_user
这个配置项可以从命令行参数(使用 --user
参数传入)或者环境变量(使用 DB_USER
变量传入)中读取。如果这两个地方都没有找到 db_user
这个配置项,那么就使用默认值 root
。
获取配置值
在定义了配置项之后,就可以使用 config()
函数获取这些配置项的值了。调用 config()
函数会返回一个对象,这个对象包含了所有存在的配置项的值。
下面的代码中展示了如何使用 config()
函数获取配置项的值,并把这些配置项的值打印出来:
-- -------------------- ---- ------- ----- ------ - -------------- - ---- ---------- ---- ------- ---- ---------- -------- ------ -- - ---- -------------- ---- ----------- ---- ------------- - --- ----------------------
如果以上代码运行成功,它会打印出如下信息:
{ db_user: 'root' }
这表示只有 db_user
这个配置项的值被成功获取,并且它的值是默认值 root
。
校验和转换值
optional-conf 还提供了校验和转换配置项的值的功能。当定义配置项时,可以指定校验或转换的函数,这些函数会在获取配置项时自动执行。
下面的代码定义了两个配置项,port
和 log_level
。其中 port
的值必须是一个数字,并且不能小于 1000 或者大于 9999。而 log_level
的值必须是字符串 'debug'
、'info'
、'warn'
、'error'
中的一个。
-- -------------------- ---- ------- ----- ------ - -------------- - ---- ------- ---- ------- ---- ------- -------- ----- --------- ------- -- ----------------------- -- ----- -- ---- -- ----- -- ---- -- - ---- ------------ ---- ------------ -------- ------- ---------- ------- -- -------------------- --------- ------- -- --------- ------- ------- ------------------------ - ---
在这个例子中,我们看到了两个新的配置项属性:validate
和 transform
。validate
属性接收一个函数作为参数,这个函数会在获取值时进行校验。如果校验函数返回 false,那么获取配置项值的过程会被停止,并且返回 undefined。而 transform
属性接收一个函数作为参数,这个函数会在获取值之后对其进行转换。
下面的代码演示了如何使用校验和转换函数:
-- -------------------- ---- ------- ----- ------ - -------------- - ---- ------- ---- ------- ---- ------- -------- ----- --------- ------- -- ----------------------- -- ----- -- ---- -- ----- -- ---- -- - ---- ------------ ---- ------------ -------- ------- ---------- ------- -- -------------------- --------- ------- -- --------- ------- ------- ------------------------ - --- ----- - ----- --------- - - --------- ------------------ ---- ---------- -------------------- ------ ---------------
在以上代码运行成功后,它会打印出如下结果:
Using port 8080 Logging level: info
优先级
在获取配置项的值时,optional-conf 会按照以下优先级顺序去查找配置项的值:
- 命令行参数(如果存在)
- 环境变量(如果存在)
- 默认值
在优先级顺序中,如果前面的步骤找到了值,那么后面的步骤会被跳过。这表示如果命令行参数和环境变量中都存在某个配置项的值,那么使用的就是命令行参数中的值。
示例
下面的代码演示了如何使用 optional-conf 编写一个 HTTP 服务器。在这个例子中,我们使用了上文提到的全部特性:
-- -------------------- ---- ------- ----- ---- - ---------------- ----- ------------ - ------------------------- -- ----- ----- ------ - -------------- - ---- ------- ---- ------- ---- ------- -------- ----- --------- ------- -- ----------------------- -- ----- -- ---- -- ----- -- ---- -- - ---- ------------ ---- ------------ -------- ------- ---------- ------- -- -------------------- --------- ------- -- --------- ------- ------- ------------------------ - --- -- ------- ----- - ----- --------- - - --------- -- -- ---- --- ----- ------ - ----------------------- ---- -- - ------------------ - --------------- ------------ --- -------------- ---------- --- -- ----- ------------------- -- -- - ------------------- --------- -- ---- ---------- -------------------- ------ --------------- ---
在运行以上代码时,可以使用 --port
参数指定服务器监听的端口,使用 LOG_LEVEL
环境变量指定日志级别,如下所示:
node server.js --port 8081 LOG_LEVEL=debug node server.js
在运行成功后,服务器会监听 8081 端口,并且日志级别为 debug。
结论
使用 optional-conf 可以帮助开发者更加方便地管理配置信息,提高开发效率。通过校验和转换函数,可防止配置项值的错误输入,提高代码健壮性。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/600575c381e8991b448ea729