不管是小项目还是大项目,将配置与代码分离是一个非常好的做法。我们通常将配置写到一个配置文件里,如 config.js 或 config.json ,并放到项目的根目录下。但实际开发时我们会有许多环境,如本地开发环境、测试环境和线上环境等,不同环境的配置不同(如:MongoDB 的地址),我们不可能每次部署时都要去修改引用 config.test.js 或者 config.production.js。config-lite 模块正是你需要的。

4.3.1 config-lite

config-lite 是一个轻量的读取配置文件的模块。config-lite 会根据环境变量(NODE_ENV)的不同加载 config 目录下不同的配置文件。如果不设置 NODE_ENV,则读取默认的 default 配置文件,如果设置了 NODE_ENV,则会合并指定的配置文件和 default 配置文件作为配置,config-lite 支持 .js、.json、.node、.yml、.yaml 后缀的文件。

如果程序以 NODE_ENV=test node app 启动,则 config-lite 会依次降级查找 config/test.jsconfig/test.jsonconfig/test.nodeconfig/test.ymlconfig/test.yaml 并合并 default 配置; 如果程序以 NODE_ENV=production node app 启动,则 config-lite 会依次降级查找 config/production.jsconfig/production.jsonconfig/production.nodeconfig/production.ymlconfig/production.yaml 并合并 default 配置。

config-lite 还支持冒泡查找配置,即从传入的路径开始,从该目录不断往上一级目录查找 config 目录,直到找到或者到达根目录为止。

在 myblog 下新建 config 目录,在该目录下新建 default.js,添加如下代码:

config/default.js

  1. module.exports = {
  2. port: 3000,
  3. session: {
  4. secret: 'myblog',
  5. key: 'myblog',
  6. maxAge: 2592000000
  7. },
  8. mongodb: 'mongodb://localhost:27017/myblog'
  9. }

配置释义:

  1. port: 程序启动要监听的端口号
  2. session: express-session 的配置信息,后面介绍
  3. mongodb: mongodb 的地址,以 mongodb:// 协议开头,myblog 为 db 名