如何使用React + Webpack应用程序存储和访问我的API密钥?

时间:2017-01-12 15:42:48

标签: node.js reactjs express webpack webpack-dev-server

我目前正在使用React,Babel和Webpack构建一个项目。

我需要在某处存储和访问我的API密钥,但我不知道在哪里。

我想我应该将API密钥存储在我的.env文件中,该文件位于我的.gitignore中。但它正在访问那些欺骗我的人。

根据我的阅读,似乎webpack可以访问yuor .env文件中的环境变量。

但是,如果我这样做,那就意味着当我发出请求时,我的API密钥将通过浏览器 - 所以密钥将不受保护?

过去我使用过节点快速后端服务器,因此我的API密钥受到保护,与浏览器无关。但是,当我有一个webpack开发服务器时,我也不确定是否需要这个。

我开始设置一个节点快速后端服务器,但后来却不知道如何将它绑定到我的webpack.config或package.json中。 Webpack已经是一个节点快递服务器了!我有2台服务器吗?唯一的理由是让第二台服务器保护我的API密钥?

我真的很困惑自己,我觉得不必要地使事情复杂化。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

您可以编写一个快速服务器来使用密钥进行API调用并提供相同的响应。以这种方式使用快速服务器作为中介,您将永远不必在客户端公开API密钥。

编辑:没读过你已经考虑过它

在这种情况下,您可以使用webpack-dev-middleware(https://github.com/webpack/webpack-dev-middleware)并仅使用一个快速服务器来提供API和静态文件。

您的代码可能如下所示:

var path = require('path');
var express = require('express');
var webpack = require('webpack');
var config = require('./webpack.config.dev');
// require keys

var app = express();
var compiler = webpack(config);

app.use(require('webpack-dev-middleware')(compiler, {
  noInfo: true,
  publicPath: config.output.publicPath
}));

app.use(require('webpack-hot-middleware')(compiler));

app.get('/api', function(req, res) {
    // api logic
)}

app.get(/^(?!\/api).*$/, function(req, res) {
  res.sendFile(path.join(__dirname, 'index.html'));
});

app.listen(3000, function(err) {
  if (err) {
    console.log(err);
    return;
  }
  console.log('Listening at http://localhost:3000');
});