【问题标题】:Problem with .env file being read in javascript project在 javascript 项目中读取 .env 文件的问题
【发布时间】: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


【解决方案1】:

我找到了一个解决方案,但没有很好的解释为什么它有效!如果有其他人参与解释,将不胜感激。

将参数从axios.create() 移动到api.get() 有效:

const api = axios.create({
  baseURL: 'http://data.fixer.io/api/',
  timeout: process.env.TIMEOUT || 5000
});

const get = async url => {
  const response = await api.get(url, {
    params: { access_key: process.env.API_KEY }
  });
  const { data } = response;
  if (data.success) {
    return data;
  }
  throw new Error(data.error.type);
};

【讨论】:

    猜你喜欢
    • 2017-09-30
    • 1970-01-01
    • 2019-07-10
    • 2021-05-22
    • 1970-01-01
    • 2022-01-17
    • 2013-10-19
    • 2018-12-03
    • 1970-01-01
    相关资源
    最近更新 更多