Я использую файл .env для хранения ключа API. Однако я не могу заставить свой базовый файл JavaScript читать файл .env. Я установил пакет dotenv npm, но, похоже, он не работает, и я не уверен, что происходит.
Я убедился, что мой .env находится в корне моего проекта. См. Картинку ниже:
Я также установил последнюю версию dotenv.
Это код в fixer-service.js, который пытается получить доступ к файлу .env:
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-ключ):
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, '...')
для получения полного пути - person goto1   schedule 10.08.2019.env
файла (не раскрывая, конечно,API_KEY
- person goto1   schedule 10.08.2019server.js
, и вы запускаете свой код, выполняяnode server.js
? - person goto1   schedule 10.08.2019debug
также покажет вам построчную информацию о том, что происходит.const { error } = require('dotenv').config({ debug: true }); console.error(error)
- person maxbeatty   schedule 10.08.2019api
, вызывая его внутриgetRates
, так что, возможно, там что-то не так ... Но эта настройка должна работать - imgur.com/a/Ddzu2oV. Кроме того, вам не нужно делатьrequire('dotenv').config()
везде, где вы пытаетесь прочитатьprocess.env
переменные. Просто сделайте это один раз в своем входном файле - в вашем случае это файлserver.js
(см. Мой пример) - person goto1   schedule 10.08.2019