我有 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,使用端口时出现以下错误的主要内容,如果未能解决你的问题,请参考以下文章

为啥 Node.js 会以这种方式执行?

Node.js 双重身份验证

使用 node.js 将数据添加到 mysql 数据库

如何在 Node.js REST API 中处理非传统查询

Node.js 集群共享缓存

Node.js 使用 AJAX 将数据发送到后端