NodeJS + Express使用fetch():如何在Javascript中绕过“你的连接不是私有的”?

时间:2016-10-12 01:23:01

标签: javascript node.js ssl express reactjs

目前我已经设置了NodeJS + ExpressJS客户端服务器,它对后端服务器进行API调用。但每当我这样做时,我首先必须直接转到API后端服务器的URL并查看以下页面,然后转到Advanced - > Proceed to https://backendserver.com:8080 (Unsafe),以便能够毫无错误地进行API调用。

enter image description here

是否有办法始终允许Proceed to https://backendserver.com:8080而不必通过浏览器手动执行此操作?

以下是我使用fetch()进行API调用的方式:

  loggingIn(userInfo) {

    var userInfoBody = {
        'username': `${userInfo.username}`,
        'password': `${userInfo.password}`
    }

    var configuration = {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json'
      },
      body: JSON.stringify(userInfoBody)
    }

    return function(dispatch) {
      fetch('https://backendserver.com:8080/creds', configuration)
      .then(response => response.json())
      .then(response => {
        console.log('Success and response is', response)
      })
      .catch((error) => {
        console.log("Error: ", error)
      })
    }

我的NodeJS + Express设置如下:

var express = require('express');
var cors = require('cors');
var path = require('path');
var config = require('../webpack.config.js');
var webpack = require('webpack');
var webpackDevMiddleware = require('webpack-dev-middleware');
var webpackHotMiddleware = require('webpack-hot-middleware');
var app = express();
var compiler = webpack(config);

app.use(cors());

app.use(webpackDevMiddleware(compiler, {noInfo: true, publicPath: config.output.publicPath}));

app.use(webpackHotMiddleware(compiler));

app.use(express.static('./dist'));

app.use('/', function (req, res) {
  res.header("Access-Control-Allow-Origin", "*");
  res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
  res.sendFile(path.resolve('client/index.html'))
})

var port = 3000;

app.listen(port, function(error) {
  if (error) throw error;
  console.log("Listening to ", port);
})

1 个答案:

答案 0 :(得分:3)

这里通常只有一个合适的解决方案:使用浏览器信任的服务器证书。

如果您有公共服务器,则需要从受信任的证书颁发机构获取证书。为此,Let's Encrypt是一项出色的(免费)服务,letsencrypt-express可以很好地与Express集成。

如果您有私人服务器(如开发或测试服务器,或仅由少数浏览器使用的服务器),您只需使用自签名证书并将其添加为受信任的服务器您的浏览器或操作系统中的证书。