Nodejs聊天程序' io未定义'通过letsencrypt设置https后出错

时间:2016-06-06 12:25:30

标签: node.js sockets https io lets-encrypt

我在我的网站上设置了一个nodejs聊天程序。

然后,当我使用letsencrypt将网站从http移至https时,聊天程序停止工作。

以下是服务器和客户端:
https://synodins.com/apps/chat/server.js
https://synodins.com/apps/chat/client.html
并直接阅读客户端脚本:
https://synodins.com/apps/chat/client.txt

问题是,正如你在客户端上看到检查元素时所看到的那样,我得到错误:
ReferenceError:未定义io

我已经搜索过此错误,发现:
socket.io - ReferenceError: io is not defined
但我已经按照他在答案中建议的方式做事了。

我不确定问题是什么,虽然我怀疑在客户端加载socket.io模块有问题。

有趣的是,我可以毫无问题地在我的localhost上运行聊天,但是当我尝试在服务器上运行它时,我得到了这个错误。

有人能看出问题所在吗?

2 个答案:

答案 0 :(得分:2)

所以我看了一下页面,发现了2个问题:

混合内容存在问题。使用“https”加载页面时,无法使用“http”加载文件。这是一个安全问题。

其次,我注意到JS文件的链接是http://127.0.0.1/...,它当前指向您的本地主机。

在上面看评论时,看起来你曾经把它指向其他地方,但我建议将标签更改为指向相同的源文件,但在src的开头使用https://...

以下是访问您网站时遇到的错误:

Mixed Content: The page at 'https://synodins.com/apps/chat/client.html'
was loaded over HTTPS, but requested an insecure script 
'http://127.0.0.1:8002/socket.io/socket.io.js'. This request has been 
blocked; the content must be served over HTTPS.

之后,请告诉我,我会进一步调查。

编辑:

如果可以使用相对URL,则始终首选。请查看与您的问题相关的答案:https://stackoverflow.com/a/29835657/672229

答案 1 :(得分:0)

在您的代码中包含此最新客户端脚本:

<script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/2.0.3/socket.io.js"></script>