尝试从API获取数据时,我使用的密钥被认为是"未定义的"。我的密钥之所以有效,是因为我将网络控制台中的 {key=undefined} 替换为实际字符串,并且我能够获取所需的数据。有什么想法吗?另外,我知道您不应该在 React 应用程序中隐藏任何 API 密钥,但我只是将其用于测试目的。如果它有助于澄清事情,我确实使用了 Create-React-App,并且他们在过去 3 个月中确实进行了重大更新,所以我想知道这是否与此有关。
const bartKey = process.env.REACT_API_BART_API_KEY;
console.log(`Api key: ${process.env.REACT_API_BART_API_KEY}` );
//inside class Component
async getAllStations(){
try{
const response = await fetch(`http://api.bart.gov/api/etd.aspx?cmd=etd&orig=${this.state.selectedStation}&key=${bartKey}&json=y`);
// console.log(response.json());
const data = await response.json();
console.log('Initial data: ', data);
// fetch(`http:api.bart.gov/api/etd.aspx?cmd=etd&orig=${this.state.selectedStation}&key=${bartKey}&json=y`)
// .then(response => response.json())
// .then(data => console.log(`here: ${data}`))
}catch(e){
console.log(`Error: ${e}`)
}
}
在使用create-react-app时对我有用:
而不是REACT_API_BART_API_KEY
在 .env 中使用REACT_APP_BART_API_KEY
然后你可以称之为process.env.REACT_APP_BART_API_KEY
从创建反应应用程序文档 https://facebook.github.io/create-react-app/docs/adding-custom-environment-variables 中检查此网址
如果您的 .env 文件工作奇怪,我会说一个非常好的解决方案是制作一个配置文件。将 API 密钥保留在那里。将该文件放在 git ignore 中,它将以相同的方式隐藏,并且肯定会工作。
此更改帮助我解决了我的问题:
请注意,dotenv 是一个零依赖模块,它将环境变量从.env
文件加载到 process.env
中。所以你应该首先下载这个包:
1 步:
npm install dotenv --save-dev
将 webpack 和 dotenv 导入 webpack.config.js 文件中并进行以下更改:
确保 module.导出一个函数后,该函数首先生成环境键 :
生成密钥时,请使用webpack.DefinePlugin()
这将有助于为应用生成全局常量。
// other imports
const dotenv = require('dotenv');
const webpack = require('webpack');
module.exports = () => {
const env = dotenv.config().parsed;
const envKeys = Object.keys(env).reduce((prev, next) => {
prev[`process.env.${next}`] = JSON.stringify(env[next]);
return prev;
}, {});
return {
/* ... here should be your previous module.exports object attributes */
entry: ['babel-polyfill', './src/index.js'],
output: {
path: path.join(__dirname, 'build'),
filename: 'bundle.js',
},
plugins: [
new HtmlWebPackPlugin({
template: "./public/index.html",
filename: "./index.html"
}),
new webpack.DefinePlugin(envKeys)
]
}
};
另请注意,在日志记录process.env
您仍然会得到空对象或什么都没有。但是如果你process.env.YOU_KEY
登录,那么你的键值就会被字符串化
希望对您有所帮助!
在您的应用程序中,尽早要求并配置 dotenv。(https://www.npmjs.com/package/dotenv(
require('dotenv').config()
您应该在程序中尽早编写该行。