重定向到HTTPS以托管在Google App Engine中的静态React应用

时间:2018-08-10 18:35:58

标签: node.js reactjs express google-app-engine https

我在GAE灵活环境中托管了一个nodejs应用。我们已经设置了由Google管理的SSL,并且https路由有效。

但是,因为我们是静态地为应用程序提供服务,所以我们不能强制从服务器端进行重定向

这是服务器代码(我从index.js调用start方法):

const express = require('express')

const PORT = process.env.PORT || 8080

/**
 * Basic web server construction.
 * Parameter function passed into 'start' as serverProcess
 *    contains the actual meat of the server side processing
 *    for the node.js backend
 */
class WebServer {
  constructor () {
    this.app = express()
    this.app.use(express.static('dist/public'))
  }
  /**
   * Begins a web server executing the 'serverProcess' function provided
   * bodyParser.json() used as middleware to enable POST requests with JSON body content
   * @param {Function} serverProcess The business logic function for the node.js backend as a whole
   */
  start () {
    return new Promise((resolve, reject) => {
      try {
        this.server = this.app.listen(PORT, function () {
          console.log('Web server being created')
          resolve()
        })
      } catch (e) {
        console.error(e)
        reject(e)
      }
    })
  }
  stop () {
    return new Promise((resolve, reject) => {
      try {
        this.server.close(() => {
          resolve()
        })
      } catch (e) {
        console.error(e.message)
        reject(e)
      }
    })
  }
}

module.exports = WebServer

我该怎么做才能确保始终将其重定向到https?

我听说过x-forwarded-proto,但是我不确定这是什么以及如何实现它,并且由于它是灵活的环境,因此我无法使用GAE提供的处理程序。

1 个答案:

答案 0 :(得分:1)

所以我想出解决办法的方法是使用一个名为express-https-redirect的软件包,这是一个表达中间件,我只需要使用express.use('/',httpsRedirect())< / p>

我还取出了路由自己的组件类,并在index.js文件中进行了设置。

这是我的index.js文件现在的样子(以前是web.server.js是从index.js启动的)

'use strict'
require('dotenv').config()
const consts = require('./consts/consts')
const httpsRedirect = require('express-https-redirect')

console.log(consts.database)

const express = require('express')
const PORT = process.env.PORT || 8080

const app = express()

app.use('/', httpsRedirect())
app.use(express.static('dist/public'))

app.listen(PORT, function () {
  console.log('Web server was started at ', PORT)
})