首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何为以下设置安装SSL (React前端+ Nodejs后端+自定义域Heroku)

如何为以下设置安装SSL (React前端+ Nodejs后端+自定义域Heroku)
EN

Stack Overflow用户
提问于 2019-01-02 15:27:44
回答 2查看 2.7K关注 0票数 5

关于我的设置的一般信息

目前,我正在构建一个使用反应的web应用程序和一个为这个web应用程序提供数据的nodejs API。这两个应用程序都托管在heroku.com上,并且彼此独立运行。我已经从一个不同的主机提供商购买了一个自定义域名,并使用heroku自定义域选项指向我的网站。

关于我的安装的技术细节

  • NodeJS服务器:快递
  • NodeJS版本: v10.15.0
  • React版本: v16.2.0
  • 自定义域: www.tabbs.nl
  • Heroku域名: tabbs-web-app.herokuapp.com

我正在经历的问题,

我一直在深入研究许多文档和教程,以便为react / NodeJS设置SSL,但却找不到一个关于如何为我的安装设置SSL /安全性的不错的教程。

我已经读过的教程:

我想实现什么?

我想要达到的目标是在React应用程序(前端)和NodeJS API (后端)之间建立一个安全的连接,这样这些应用程序之间的所有数据都是加密和安全的。另外,我希望我的自定义域(由与Heroku不同的主机提供商购买)是安全的,并强制使用https。

如有任何问题或其他资料,请随时提出!

EN

回答 2

Stack Overflow用户

发布于 2019-01-03 02:58:37

您试过在节点中使用https模块吗?

你可以这样做:

代码语言:javascript
运行
复制
var express = require('express');
var https = require('https');
var http = require('http');
var app = express();

http.createServer(app).listen(80);
https.createServer(options, app).listen(443);

express()返回的应用程序实际上是一个JavaScript函数,用于将其传递给Node的HTTP服务器,作为处理请求的回调。这使得提供HTTP和HTTPS版本的应用程序具有相同的代码库变得很容易,因为应用程序不继承这些代码(它只是一个回调。

如果您正在使用应用程序,请打开您的终端并键入“”。这将创建一个包含所有静态文件的构建文件夹。

现在回到您的节点后端服务,并添加以下内容:

代码语言:javascript
运行
复制
var express = require('express');
var path = require('path');
var https = require('https');
var http = require('http');
var app = express();

const options = {
  key: fs.readFileSync("/srv/www/keys/my-site-key.pem"),
  cert: fs.readFileSync("/srv/www/keys/chain.pem")
};
http.createServer(app).listen(80);
https.createServer(options, app).listen(443);

app.use(express.static(path.join(__dirname, 'build')));

app.get('/', function(req, res) {
  res.sendFile(path.join(__dirname, 'build', 'index.html'));
});

如果您使用react路由器为您的web应用程序处理路由,那么您将修改GET请求如下:

代码语言:javascript
运行
复制
var express = require('express');
const path = require('path');
var https = require('https');
var http = require('http');
var app = express();
const options = {
  key: fs.readFileSync("/srv/www/keys/my-site-key.pem"),
  cert: fs.readFileSync("/srv/www/keys/chain.pem")
};
http.createServer(app).listen(80);
https.createServer(options, app).listen(443);

app.use(express.static(path.join(__dirname, 'build')));

app.get('/*', function(req, res) {
  res.sendFile(path.join(__dirname, 'build', 'index.html'));
});
票数 1
EN

Stack Overflow用户

发布于 2020-04-05 10:39:46

这不是一个复杂的问题,不要担心ssl,只需为Node.JS/Express创建自己的证书就够了。

React有一个内置的方法来执行api调用,

将这一行添加到您的React安装的package.json,

代码语言:javascript
运行
复制
"proxy": "http://localhost:8000/"

然后像这样调用api服务,

代码语言:javascript
运行
复制
 //Generic API Call
 callApi = async () => {
    const response = await fetch('/api/hello');
    const body = await response.json();
    if (response.status !== 200) throw Error(body.message);

    return body;
  };

  // A Submit handler to proxy
  handleSubmit = async e => {
    e.preventDefault();
    const response = await fetch('/api/myrequest', {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json',
      },
      body: JSON.stringify({ post: this.state.post }),
    });
    const body = await response.text();

    this.setState({ responseToPost: body });
  };

一切都很好。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54008965

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档