在nodejs和打字稿中使用dotenv模块

问题描述

我使用此名称.env创建文件

DATABASE_URL='mongodb://localhost:27017/Fimstan'
SERVER_PORT=3000

现在我想在app.ts中使用它来使用SERVER_PORT

import * as dotenv from 'dotenv';
dotenv.config();

 app.listen(process.env.SERVER_PORT,() => {
  console.log(`Server Run On Port ${process.env.SERVER_PORT}`);
});

但是它在终端Server Run On Port undefined

显示了此消息

现在是什么问题?我如何在项目中使用.env内容

import express,{ Request,Response,NextFunction } from 'express';
import * as dotenv from 'dotenv';
import http from 'http';
import Logger from './core/logger/logger';
import bodyParser from 'body-parser';
import mongoose from 'mongoose';
import passport from 'passport';
import cors from 'cors';
import redisClient from 'redis';
import path from 'path';
import configuration from './config/index';
import cookieParser from 'cookie-parser';

process.on('uncaughtException',(e) => {
  Logger.error(e);
});

dotenv.config();


const app: express.Application = express();


app.listen(process.env.SERVER_PORT,() => {
  console.log(`Server Run On Port ${process.env.SERVER_PORT}`);
});

app.get('/',(req,res,next) => {
  console.log('Hello')
})

mongoose.Promise = global.Promise;
mongoose.connect(configuration.databaseConfig.url,{
  useNewUrlParser: true,useCreateIndex: true,useUnifiedTopology: true,});


app.use(cors());
app.use(bodyParser.json());
app.use(express.static(path.join(__dirname,"public")));
app.use(bodyParser.urlencoded({ extended: true }));
app.use(cookieParser("SchoolManagerSecretKey"));

解决方法

首先,您需要确保正确设置了重要部分才能正常工作。 这就是为什么我将忽略其余的导入和应用逻辑。尝试测试我单独描述的解决方案,以检查是否可以解决您的问题。

  1. 确保在根项目文件夹中具有package.json文件和.env文件。
  2. 在根项目文件夹路径中的终端中输入“ npm i dotenv”(注意:它已经包含您在Typescript中所需的定义)。
  3. 现在有文件:

    // root/.env

    SERVER_PORT=3000
    
    // root/app.ts
    import dotenv from 'dotenv';
    dotenv.config();
    console.log(`Server Run On Port ${process.env.SERVER_PORT}`);

此外,请注意,当从process.env.variableName进行分配时,将获得类型(字符串|未定义)。 (我假设您使用的是最新版本的node,dotenv和Typescript,但我认为较旧版本没有太大的区别。)