won*_*ids 6 mongodb express typescript
我正在尝试使用 Typescript 加载 .env 环境变量。
这是我的.env和app.ts文件
//.env
DB_URL=mongodb://127.0.0.1:27017/test
Run Code Online (Sandbox Code Playgroud)
//.env
DB_URL=mongodb://127.0.0.1:27017/test
Run Code Online (Sandbox Code Playgroud)
当我app.ts使用ts-node src/app.ts命令运行时,抛出此错误
// app.ts
import * as dotenv from 'dotenv';
import express from 'express';
import mongoose from 'mongoose';
dotenv.config();
mongoose.connect(process.env.DB_URL, config);
Run Code Online (Sandbox Code Playgroud)
但是当我在下面添加 if 语句时,它运行良好
Unable to compile TypeScript:
src/app.ts:50:18 - error TS2769: No overload matches this call.
Overload 1 of 3, '(uris: string, callback: (err: MongoError) => void): Promise<typeof import("mongoose")>', gave the following error.
Argument of type 'string | undefined' is not assignable to parameter of type 'string'.
Type 'undefined' is not assignable to type 'string'.
Overload 2 of 3, '(uris: string, options?: ConnectionOptions | undefined): Promise<typeof import("mongoose")>', gave the following error.
Argument of type 'string | undefined' is not assignable to parameter of type 'string'.
Type 'undefined' is not assignable to type 'string'.
50 mongoose.connect(process.env.DB_URL, config);
Run Code Online (Sandbox Code Playgroud)
//app.ts
import * as dotenv from 'dotenv';
import express from 'express';
import mongoose from 'mongoose';
dotenv.config();
//Add this code
if (!process.env.DB_URL) {
process.exit(1);
}
mongoose.connect(process.env.DB_URL, config);
Run Code Online (Sandbox Code Playgroud)
我想知道为什么在下面的代码中没有抛出这个错误?
tha*_*.ts 19
从错误消息中,您可以得出结论,TypeScript 期望 的第一个参数mongoose.connect()是 astring但环境变量可以是string或undefined。
通过添加条件,可以消除的可能性process.env.DB_URL是undefined当在一次调用mongoose.connect(process.env.DB_URL, config)
如果您确定它永远不会undefined,您可以使用 TypeScript非空断言运算符
mongoose.connect(process.env.DB_URL!, config);
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)
这将确保在下一个import语句之前设置环境变量,因此您只需在应用程序的主文件中执行此操作一次。
| 归档时间: |
|
| 查看次数: |
7529 次 |
| 最近记录: |