【发布时间】:2017-08-02 16:26:18
【问题描述】:
我正在使用 NodeJS 构建一个网站,并将其部署到 Heroku。但是当我打开网站时,出现了问题。问题来了:
代码: 在我的网站的主要源文件中:
app.get('/', (req, res) => {
var data = {
rootURL: `${req.protocol}://${req.get('Host')}`,
};
res.render('home.html', data);
});
然后,在 home.html 中,我包含以下脚本:
<script type="text/javascript">
$.getJSON('{{rootURL}}'+'/about', {}, function(data){
// Code here is deleted for now.
}).fail(function(evt) {
// Code here is deleted for now.
});
</script>
这里我使用 hbs 模板,因此 {{rootURL}} 等于与 'home.html' 页面一起呈现的 'data' 对象中的 'rootURL' 属性。 '/about' 是我为我的网站设计的 API 之一。它基本上会发回一些关于网站本身的信息,并且这些信息被包裹在 JSON 中。
那么,问题来了。该代码在本地运行良好,当我向 Heroku 发送 HTTP 请求而不是 HTTPS 时运行良好。但如果我向 Heroku 发送 HTTPS 请求,我会收到“混合内容”错误: Errors I get in Chrome Console.
然后我切换到开发人员工具中的“元素”选项卡,我看到了这个: The schema is HTTP, not HTTPS!
我在这里很困惑。我只是在 'req' 对象中获取 'protocol' 属性,然后用它填充模板。所以,我假设如果我在 Chrome 浏览器中输入 '[my-website-name].herokuapp.com' 和 'https' 架构,我部署在 Heroku 上的 nodeJS 应用程序应该会得到 'https'对于 req.protocol。但显然情况并非如此。这里有什么问题?
【问题讨论】:
标签: javascript node.js express heroku