原文链接: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
执行所有命令后,我们的项目文件夹结构将如下所示:
3、编写配置代码
在IDE或文本编辑器中打开config.js文件。
首先,我们将导入所需的包。
const dotenv = require('dotenv');
const joi = require('joi');
const path = require('path');
我们为什么要使用这些软件包?
-
do tenv: Do t**env**是一个零依赖模块,它将环境变量从. env文件加载到process.env.
-
joi: JavaScript最强大的模式描述语言和数据验证器。
-
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对象类型验证,并确定了我们的规则。
-
NODE_ENV:这个键是一个字符串,只接受'生产'、'开发'和'测试'。如果我们给不同的值,它会抛出一个错误。这是必需的。
-
PORT:这个键是一个正数。如果我们给负值,它会抛出一个错误。这是必需的。
-
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启动
我的输出:
7.让我们检查验证是否有效?
我将删除'PORT'变量从***'. env'***文件,并将再次启动我的应用程序。
结果:
它按预期工作。它抛出一个错误,并说;“端口”是必需的。
感谢每一个阅读的人。我希望它是有用的。
我从这个仓库学习。感谢所有的贡献者!:github.com/hagopj13/no…