[译]如何在NodeJS中验证环境文件

127 阅读3分钟

原文链接:dev.to/sukruozdemi… 作者:Sukru Ozdemir

我将向您展示如何使用Joi验证来验证. env文件。我目前正在使用几乎所有的Express JS应用程序。所以让我们开始吧...

1.创建项目

首先让我们创建一个项目。我们将使用npm来创建项目。打开您的终端,转到您想要创建项目文件夹的位置。然后按顺序运行以下命令。

mkdir project-folder-name

cd project-folder-name/

npm init -y

npm install joi dotenv

执行所有命令后,使用您最喜欢的IDE或文本编辑器打开您的项目。

2、创建配置文件

在终端或IDE中创建一个名***为config的文件夹。然后在config文件夹中创建一个名为config.js.***的文件

终端命令:

mkdir config

cd config/

touch config.js

执行所有命令后,我们的项目文件夹结构将如下所示:

img

3、编写配置代码

在IDE或文本编辑器中打开config.js文件。

首先,我们将导入所需的包。

const dotenv = require('dotenv');

const joi = require('joi');

const path = require('path');

我们为什么要使用这些软件包?

  1. do tenv: Do t**env**是一个零依赖模块,它将环境变量从. env文件加载到process.env.

  2. joi: JavaScript最强大的模式描述语言和数据验证器。

  3. path: path模块提供用于处理文件和目录**路径**的实用程序。

导入包后,我们将. env文件位置作为dotenv包的选项传递。目前我们还没有. env文件。我们稍后将创建。

dotenv.config({path:path.join(__dirname,'.. /.env') });

创建环境文件模式
const envVarsSchema = joi

  .object()

  .keys({

    NODE_ENV: joi

      .string()

      .valid("production", "development", "test")

      .required(),

    PORT: joi.number().postive().required(),

    API_SECRET: joi.string().required().description("My api secret"),

  })

  .unknown();

我们做了什么?

我们用我们的环境变量名创建了joi对象类型验证,并确定了我们的规则。

  1. NODE_ENV:这个键是一个字符串,只接受'生产'、'开发'和'测试'。如果我们给不同的值,它会抛出一个错误。这是必需的。

  2. PORT:这个键是一个正数。如果我们给负值,它会抛出一个错误。这是必需的。

  3. API_SECRET:这个键是一个字符串,它是必需的。

重要提示

代码末尾有一个名为未知的方法。它只覆盖当前对象范围内未知键的处理。(不适用于子对象)

我们使用这个方法是因为;process.env中有几十个环境变量被我们的操作系统或其他程序使用。所以如果我们不使用这个方法,joi会抛出一个错误。

验证我们的架构

const { value: envVars, error } = envVarsSchema

  .prefs({ errors: { label: 'key' } })

  .validate(process.env);

我们验证了joi模式,从joi验证中获得了非结构化的“值”和“错误”变量,并为名为“env Vars”的“值”变量提供了别名。

检查是否有错误

if (error) {

  throw new Error(`Config validation error: ${error.message}`);

}

如果模式中有错误,我们将抛出一个错误。

输出我们的价值观

module.exports = {

  env: envVars.NODE_ENV,

  port: envVars.PORT,

  apiSecret: envVars.API_SECRET,

};

我们将我们的值导出为对象。

config.js文件的完整代码

const dotenv = require("dotenv");

const joi = require("joi");

const path = require("path");



dotenv.config({ path: path.join(__dirname, "../.env") });



const envVarsSchema = joi

  .object()

  .keys({

    NODE_ENV: joi

      .string()

      .valid("production", "development", "test")

      .required(),

    PORT: joi.number().positive().required(),

    API_SECRET: joi.string().required().description("My api secret"),

  })

  .unknown();



const { value: envVars, error } = envVarsSchema

  .prefs({ errors: { label: "key" } })

  .validate(process.env);



if (error) {

  throw new Error(`Config validation error: ${error.message}`);

}



module.exports = {

  env: envVars.NODE_ENV,

  port: envVars.PORT,

  apiSecret: envVars.API_SECRET,

};

4、创建. env文件

转到项目根目录并创建一个名为***. env***的文件,然后将环境变量写入该文件。

你的. env文件应该是这样的:

NODE_ENV="development"

PORT=3000

API_SECRET="secret"

5、package.json“开始”脚本

打开package.json文件并编写开始脚本。

"start":"节点"

我的package.json文件:

{

  "name": "project-folder-name",

  "version": "1.0.0",

  "description": "",

  "main": "index.js",

  "scripts": {

    "start": "node .",

    "test": "echo \"Error: no test specified\" && exit 1"

  },

  "keywords": [],

  "author": "",

  "license": "ISC",

  "dependencies": {

    "dotenv": "^8.2.0",

    "joi": "^17.3.0"

  }

}

6.创建index.js文件

转到项目根目录并创建一个名为***index.js.***的文件,然后编写代码。

我将把我的配置文件打印到控制台。每次我使用配置文件时,它都会检查我的. env文件是否有效。所以在应用程序之前使用很有用,因为如果有错误,我的应用程序将无法启动。

我的index.js档案:

const config = require("./config/config");



console.log(config);

process.exit(0);

从终端运行start命令。

npm运行启动或npm启动

我的输出:

img

7.让我们检查验证是否有效?

我将删除'PORT'变量从***'. env'***文件,并将再次启动我的应用程序。

结果:

img

它按预期工作。它抛出一个错误,并说;“端口”是必需的。

感谢每一个阅读的人。我希望它是有用的。

我从这个仓库学习。感谢所有的贡献者!:github.com/hagopj13/no…

封面图片:unsplash.com/photos/oqSt…