Kri*_*que 18 node.js typescript
我只是想尝试主文件上的文件config。.env
但不知怎的,它不起作用,但错误是错误的,它显示undefined但它已经存在
第一次尝试
require('dotenv').config({ path: `${__dirname}/../.env` })
Run Code Online (Sandbox Code Playgroud)
第二次尝试
import * as dotenv from 'dotenv'
dotenv.config()
Run Code Online (Sandbox Code Playgroud)
第三次尝试
import 'dotenv/config'
Run Code Online (Sandbox Code Playgroud)
不知怎的,.env没有加载。
通过执行该文件
ts-node main.ts
Run Code Online (Sandbox Code Playgroud)
.env 文件
SESSION_SECRET = uq07nyvn4xadskdg
COOKIE_SECRET = 0k5kb4qi8shhi7u0n
DB_HOST = 127.0.0.1
DB_PORT = 3306
DB_USER = root
DB_PASS = root
DB_NAME = db_name
Run Code Online (Sandbox Code Playgroud)
数据库连接
export const db = createPool({
host: process.env.DB_HOST,
port: process.env.DB_PORT,
user: process.env.DB_USER,
password: process.env.DB_PASS,
database: process.env.DB_NAME,
})
Run Code Online (Sandbox Code Playgroud)
会议
const sessionD = session({
secret: process.env.SESSION_SECRET,
resave: true,
saveUninitialized: true,
store: new MySQLStore({
host: process.env.DB_HOST,
port: process.env.DB_PORT,
user: process.env.DB_USER,
password: process.env.DB_PASS,
database: process.env.DB_NAME,
}),
})
Run Code Online (Sandbox Code Playgroud)
Ale*_*yne 32
dotenv不告诉打字稿任何事情。它所做的一切都是在运行时将您的内容放入.env其中process.env。这不会改变任何类型的任何东西。
所以你正在处理的process.env似乎有这种类型:
export interface ProcessEnv {
[key: string]: string | undefined;
}
Run Code Online (Sandbox Code Playgroud)
这意味着您不能将其分配给不能为 的值undefined。
const myVar: string = process.env.WHATEVER
// Type 'string | undefined' is not assignable to type 'string'.
// Type 'undefined' is not assignable to type 'string'.
Run Code Online (Sandbox Code Playgroud)
解决方法是处理未定义的情况。如果有人忘记了该.env文件或删除了其中的一些条目怎么办?在这种情况下你的代码应该做什么?
也许,提供一个默认值:
const whatever: string = process.env.WHATEVER ?? 'whatever default'
Run Code Online (Sandbox Code Playgroud)
或者可能会抛出一个错误:
let whatever: string
if (process.env.WHATEVER) {
whatever = process.env.WHATEVER
} else {
throw new Error("WHATEVER environment variable is not set")
}
Run Code Online (Sandbox Code Playgroud)
TL;DR:处理此案undefined。
Din*_*nny 16
预期的类型是字符串或字符串数组,并且您正在传递打字稿无法识别的环境变量。因此,您必须将所有 .env 变量的环境变量类型转换为这样的字符串,并且错误将被删除。
secret: process.env.SESSION_SECRET as string;
Run Code Online (Sandbox Code Playgroud)
您可以在此处阅读有关类型断言的内容。
这在 2022 年对我有用:
我建议您为变量创建类型声明。将其命名为 env.d.ts 并将其与以下内容一起保存在源目录中,例如 /src
declare namespace NodeJS {
interface ProcessEnv {
readonly SESSION_SECRET: string
readonly COOKIE_SECRET: string
readonly DB_HOST: string
readonly DB_PORT: string
readonly DB_USER: string
readonly DB_PASS: string
readonly DB_NAME: string
}
}
Run Code Online (Sandbox Code Playgroud)
注意:端口是一个字符串,因为 dotenv 将所有内容都作为字符串处理
现在确保 env.d.ts 包含在 tsconfig.json 的 include 部分中(伪代码 - ... 代表其他属性:
{
...,
"include": [
"src/**/*.d.ts",
]
}
Run Code Online (Sandbox Code Playgroud)
现在变量应该可以被打字稿识别。
| 归档时间: |
|
| 查看次数: |
20931 次 |
| 最近记录: |