我在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提供的处理程序。
答案 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)
})