在 Node.js 中创建和存储配置

Isaac Tony 2022年5月13日
在 Node.js 中创建和存储配置

在 Node.js 中管理配置文件对于新手开发人员来说可能是一项艰巨的任务。尽管有诸如 convicthusksconfig 之类的库可以使配置文件的开发和管理变得更加容易,但确实如此。

使配置文件的存储和管理更容易的最佳实践之一是创建一个集中的文件来存储文件并确保可以在不影响代码的情况下更改文件。

拥有一个可以在其他环境中扩展的集中式文件,除了提高可重用性外,还可以让其他开发人员更轻松地阅读你的代码。

在 Node.js 中,配置文件通常存储在默认配置文件中;但是,它们可以被外部源或环境变量覆盖和扩展。

配置文件可以是不同的文件格式;这些包括常见的诸如 .jsonYAML 和其他诸如 .json5.hjson 之类的。

安装 node-config 以在 Node.js 中创建和存储配置

Node-config 是一个 npm 包,它允许我们创建和存储不同的部署配置文件。我们可以使用此包定义默认参数以扩展到开发、生产或登台环境。

我们可以使用 npm 包管理器安装和设置 Node-config。但是,我们首先需要创建一个简单的快速服务器,然后导航到应用程序的文件夹,如下所示。

示例应用程序服务器

一旦应用程序服务器就位,我们可以通过运行以下命令来安装配置包。

$ npm install config

上面的命令会将配置包作为我们的依赖项之一添加到 package.json 文件中,如下所示。

{
  "name": "myapp",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "Isaac Tony",
  "license": "MIT",
  "dependencies": {
    "config": "^3.3.7",
    "express": "^4.17.2"
  }
}

我们现在可以创建一个包含所有默认配置文件的文件,首先创建一个我们将命名为 config 的文件夹,然后创建一个名为 default.json 的文件,如下面的应用程序结构所示。

应用结构

如上所示,尽管在使用 Node-config 时,我们可以灵活地选择存储配置的文件类型,但我们选择坚持 .json 格式,因为它是默认格式。

现在在文件 default.json 中,我们可以在我们的应用程序中添加我们的配置设置。以下是我们可以添加到 default.json 文件中的一些基本配置。

{
    "server": {
        "port": 3000
    },
    "db": {
        "host": "localhost",
        "port": 27017,
        "name": "mongodb"
    }
}

现在使用 config.get 函数,我们可以检索这些参数和设置并在我们的应用程序中使用它们,如下面的 index.js 文件所示。

const express = require('express')
const app = express()
 
const config = require('config');
const port = config.get('server.port');
const host = config.get("db.host");
 
 
app.get('/', (req, res) => {
  res.send('Hello World!')
})
 
app.listen(port, host, () => {
  console.log(`The application is listening on ${host}:${port}`)
})

一旦我们有了这个默认配置文件,我们就可以通过为各自的环境创建配置文件,轻松地将这些配置设置扩展到生产、测试​​等。

我们还可以通过在另一个特定于环境的配置文件中重复默认配置文件中的配置变量来执行特定于环境的覆盖,或者通过在启动应用程序之前创建 NODE-CONFIG 变量来通过命令行。

Author: Isaac Tony
Isaac Tony avatar Isaac Tony avatar

Isaac Tony is a professional software developer and technical writer fascinated by Tech and productivity. He helps large technical organizations communicate their message clearly through writing.

LinkedIn