【发布时间】:2019-12-17 15:52:33
【问题描述】:
我正在使用 .env 文件来存储 API 密钥。但是,我似乎无法让我的基本 JavaScript 文件读取 .env 文件。我已经安装了 dotenv npm 包,但它似乎没有工作,我不确定发生了什么。
我已确保我的 .env 位于项目的根目录中。见下图:
我还安装了最新版本的 dotenv。
这是尝试访问 .env 文件的 fixer-service.js 中的代码:
require("dotenv").config();
const axios = require("axios");
const symbols = process.env.SYMBOLS || "EUR,USD,GBP";
const api = axios.create({
baseURL: "http://data.fixer.io/api",
params: {
access_key: process.env.API_KEY
},
timeout: process.env.TIMEOUT || 5000
});
这是 server.js 中试图访问 .env 文件的代码:
require("dotenv").config();
const { getRates } = require("./lib/fixer-service");
// read .env files
const express = require("express");
const app = express();
const port = process.env.PORT || 3000;
这是 .env 文件中的代码(我已经删除了 API-Key):
API_KEY=api-key
PORT=3000
TIMEOUT=5000
SYMBOLS=EUR,USD,GBP,AUD,BTC,KES,JPY,CNY
当我尝试运行我的开发服务器时,我收到以下错误消息:
(node:9045) UnhandledPromiseRejectionWarning: Error: missing_access_key at get (/Users/selina/Desktop/single-page-application/lib/fixer-service.js:22:9) at process._tickCallback (internal/process/next_tick.js:68:7) (node:9045) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 1)```
【问题讨论】:
-
您是否尝试过指定
.env文件的完整路径并查看是否可行?require('dotenv').config({ path: full/path/here })- 我建议使用path.join(__dirname, '...')之类的东西来获取完整路径 -
是的,我已经尝试指定完整路径它仍然不起作用。
-
你能用你的项目/文件夹结构和
.env文件更新你的问题吗(当然不暴露API_KEY -
这段代码在
server.js中,而您正在通过node server.js运行代码? -
我已经用更多信息更新了我的问题。
标签: javascript npm environment-variables dotenv