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

Node.js Nodejs聊天程序';io未定义';通过letsencrypt设置https后出错,node.js,sockets,https,io,lets-encrypt,Node.js,Sockets,Https,Io,Lets Encrypt,我在我的网站上设置了一个nodejs聊天程序 然后,当我使用letsencrypt将网站从http移动到https时,聊天程序停止工作 以下是服务器和客户端: 直接阅读客户端脚本: 问题是,正如您在clientoninspect元素中看到的,我得到了错误: 引用错误:未定义io 我已搜索此错误并找到: 但我已经在按照他在回答中建议的方式做事了 虽然我怀疑客户端中的socket.io模块加载有问题,但我并不确定问题出在哪里 有趣的是,我可以在本地主机上运行聊天,没有问题,但当我尝试在服务器

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

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

以下是服务器和客户端:


直接阅读客户端脚本:

问题是,正如您在clientoninspect元素中看到的,我得到了错误:
引用错误:未定义io

我已搜索此错误并找到:

但我已经在按照他在回答中建议的方式做事了

虽然我怀疑客户端中的socket.io模块加载有问题,但我并不确定问题出在哪里

有趣的是,我可以在本地主机上运行聊天,没有问题,但当我尝试在服务器上运行聊天时,会出现此错误


有人知道问题出在哪里吗?

所以我查看了页面,发现了两个问题:

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

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

从上面的注释来看,它似乎曾经指向过其他地方,但我的建议是将标记更改为指向同一个源文件,但使用
https://...
在src的开头

以下是我在访问您的站点时遇到的错误:

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,则始终首选该URL。请查看与您的问题相关的答案:

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

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


还应该有一个警告:“[阻止]处的页面运行了来自的不安全内容。”问题是您正在https站点上通过http加载js。是的。但当我这样做时,服务器会连接,但当我这样做时,我会得到“安全连接失败”。这不是问题吗?我该如何解决这个问题?我不认为我可以在letsencrypt中允许通过直接ip地址进行https呼叫。正如我现在看到的,您的
socket.io/socket.io.js
甚至没有被加载,原因是地址不正确。那里没有这样的档案。您确定服务器上的端口8002已打开吗?抱歉,我现在打开了它。我安装了bower,如您所指的答案所示,使用bower引用似乎可以消除io错误,并允许我无错误地运行整个客户端脚本。问题是它似乎仍然无法连接。我想知道我使用http的是不是io.connect调用。但是我不能使用https,因为这样我会得到“安全连接失败”。可以在这里看到:抱歉,IP:PORT地址给了我错误:“89.160.129.62意外地关闭了连接。”我无法访问它。有什么方法可以更新synodins.com,我可以在那里查看吗?您的socket.io可能配置不正确。请检查此问题,并查看是否将socket.io设置为动态(以“//www.example.com”开头,而不是“/”或专门将socket.io设置为使用https而不是http。您的意思是,更改var connection=io.connect(');?我是否应该使用它//https:..?是的,将其从
io.connect('89.160.129.62:8002')更改为;
io.connect('https://89.160.129.62:8002);