0

现在,我在客户端 javascript 中使用 OpenWeatherMap API 密钥来创建一个简单的天气应用程序(Node/Express)。我知道这在开发之外并不理想,所以我做了 npm install dotenv。在服务器端,我可以在 Node.js 中很好地获取和设置环境变量。当我控制台注销时,我可以看到它们。

如何在客户端的 javascript 中调用 API 密钥?例如,目前我的天气应用程序在一个名为weather.js 的文件中具有简单的逻辑,而HTML 使用weather.js。

理想情况下,我只想调用我的 apihttp://api.openweathermap.org/data/2.5/forecast/daily?lat=${lat}&lon=${lon}&units=metric&appid=${process.env.WEATHER_API_KEY}

我知道 .envs 在服务器端,你必须做一些事情才能让它在客户端工作。这里的新节点开发人员读了太多,我认为我对 requireJS、Browserify、模块、.env 等感到困惑......

4

3 回答 3

2

您不希望您的 API 密钥(或其他机密)公开。在前端使用它们会使它们在检查页面和网络请求日志时可见。您需要在服务器端存储和使用您的秘密。

在您的后端创建一个路由(您可以使用CORS保护它不被其他域使用),该路由调用天气 API(使用存储在.env您服务器上的令牌)并发回数据。

然后让你的前端到达那条路线。

于 2019-03-14T18:57:37.613 回答
0

您必须从服务器请求 API 密钥。
这可以通过在后端创建一个简单的路由来轻松完成,该路由将返回密钥作为响应。

If you don't want to expose your API Key (I recommend you to not expose it), what you can do is create a route in your backend that will make a call to the WeatherAPI using your API key, and the client will send HTTPS request to your backend, which will then create another HTTPS request to the WeatherAPI and send the response back to the client.

于 2019-03-14T18:58:51.127 回答
0

You don't want to expose your API keys to outside world. What you can do is to create backend route (/api/keys) make it protected with CORS and call it from front-end.

于 2019-03-14T19:05:28.447 回答