我有 node.js 应用程序我正在使用 dotenv 设置 .env,使用端口时出现以下错误
Posted
技术标签:
【中文标题】我有 node.js 应用程序我正在使用 dotenv 设置 .env,使用端口时出现以下错误【英文标题】:I have node.js application I am setting .env using dotenv, I get the following error when using port 【发布时间】:2020-03-01 03:28:57 【问题描述】:我有 node.js 应用程序我已经安装了 dotenv 并在我的 .env 文件中添加以下配置
DB_HOST='localhost'
DB_Database=TheDatabasename
DB_USER=TheUser
DB_PASS=thePassword
DB_PORT=1433
我正在使用 sqlserver 我调用 dotenv,如下所示:
const sql = require('mssql');
const dotenv = require('dotenv');
dotenv.config();
const config =
user: process.env.DB_USER,
password: process.env.DB_PASS,
server: process.env.DB_HOST,
database: process.env.DB_Database,
port: process.env.DB_PORT,
const poolPromise = new sql.ConnectionPool(config)
.connect()
.then(pool =>
console.log('Connected to MSSQL')
return pool
)
.catch(err => console.log('Database Connection Failed! Bad Config: ', err))
module.exports =
sql, poolPromise
我收到以下错误:
Database Connection Failed! Bad Config: TypeError: The "config.options.port" property must be of type number.
【问题讨论】:
试试port : parseInt(process.env.DB_PORT);
当您从 .env 文件中读取数据时,这些值将作为字符串返回。您需要将它们解析为适当的类型(在本例中为整数) - parseInt(process.env.DB_PORT)
【参考方案1】:
Mssql,需要端口参数类型号,环境变量为字符串。
您应该在发送给驱动程序之前转换值
...
port: parseInt(process.env.DB_PORT, 10),
...
【讨论】:
如何在打字稿中做到这一点?当我尝试运行代码时,它会抛出“'string | undefined' 类型的参数不可分配给 'string' 类型的参数” 我认为你应该使用后备...parseInt(process.env.DB_PORT || "", 10)
【参考方案2】:
所有环境变量都是字符串,所以只需将端口转换为 INT。
const config =
user: process.env.DB_USER,
password: process.env.DB_PASS,
server: process.env.DB_HOST,
database: process.env.DB_DATABASE,
port: +process.env.DB_PORT,
pool:
max: 10,
min: 0,
idleTimeoutMillis: 30000,
,
options:
encrypt: false,
trustedServerCertificate: false,
,
;
【讨论】:
以上是关于我有 node.js 应用程序我正在使用 dotenv 设置 .env,使用端口时出现以下错误的主要内容,如果未能解决你的问题,请参考以下文章