如何使用.env与ES6模块与Node js和表达应用程序?



我需要你的帮助,我如何在这个应用程序上使用。env文件。这是我的问题:我在我的节点express应用程序中使用ES6模块构建一个应用程序。我面临一个问题,同时将我的变量存储在。env文件中,下面这两种方式都给出了这个错误:MongooseError: The uri parameter to openUri() must be a string, got "undefined". Make sure the first parameter to mongoose.connect() or mongoose.createConnection() is a string. did not connect。但是,当我只使用普通字符串connect工作时,这意味着我没有正确使用dotenv文件:

1 -

import {} from "dotenv/config.js";
import express from "express";
import mongoose from "mongoose";
import cors from "cors";
const app=express()
...
//DB config
mongoose.connect(process.env.CONNECTION_URL,
{
useCreateIndex: true,
useNewUrlParser: true,
useUnifiedTopology: true,
})
app.listen(port,()=>console.log(`server on ${port}`) 

2 -

import dotenv from "dotenv";
import express from "express";
import mongoose from "mongoose";
import cors from "cors";
dotenv.config();
const app=express()
...
//DB config
mongoose.connect(process.env.CONNECTION_URL,
{
useCreateIndex: true,
useNewUrlParser: true,
useUnifiedTopology: true,
})
app.listen(port,()=>console.log(`server on ${port}`)

下面是如何使用它作为ES6模块

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

路径默认为。/root/。

要向当前目录(Dir)添加路径,我们需要在希望导入所有变量的文件中包含以下代码

import dotenv from 'dotenv'
import path from 'path'
import {fileURLToPath} from 'url';
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);
dotenv.config({ path: path.join(__dirname, '.env') });
// const express = require('express')
import express from 'express';

server.js和.env应该在同一个目录下,如果你不操作path.join(__dirname

您可以访问变量process.env.myvariable。只要确保它工作并打印所有变量:console.log(process.env)

感谢

如果您不需要dotenv.config()函数的返回值,您可以使用此模式执行配置函数,作为导入的副作用:

import 'dotenv/config';

我推荐这种语法,因为它提高了与严格遵守ESM规范的Typescript编译器(即SWC)的兼容性,并且还提供了与想要重新排序import语句的代码格式化规则的更好兼容性。

你是对的,你没有获取环境变量

我来告诉你我是怎么做的。用你的变量创建一个。env文件。

然后在app.js中:

const dotenv = require('dotenv');
dotenv.config();

使用变量uri你在。env

中有
const foo = process.env.uri

最新更新