Feathers.js -> socket.io 没在听?好吧,它没有连接

Feathers.js -> socket.io not listening? Wel it's not connecting

我正在尝试在我的 ISP 网站上启动我的 Web 应用程序。该站点的 url 在本说明中将变为 'dev.domain.com'。我从 webstorm 上传了项目。该项目是根据 feathersjs 的 'Your first App' 文档从头开始构建的。

上传后,我仍然有ISP给的默认apache网页。原因:index.html 在 public 中。所以我所做的就是用这个内容制作一个 .htaccess

RewriteEngine On
RewriteBase /

RewriteCond %{THE_REQUEST} /public/([^\s?]*) [NC]
RewriteRule ^ %1 [L,NE,R=302]

RewriteRule ^((?!public/).*)$ public/ [L,NC]

现在正在加载应用程序。然后我遇到了找不到 socket.io.js 的问题。这是由 index.html 文件

中的这一行引起的
<script src="socket.io/socket.io.js"></script>

于是我搜索了解决方案,在'node-modules\socket.io-client\dist'目录下找到了socket.io.js。我把它复制到 'assets\scripts\js' 并将上面的 link 调整到那个文件夹。使用 'npm start' 一切仍在工作。

此外,因为我记得 'config\default.json' 有特定信息,所以我将其更改为也匹配(我还不知道如何触发 production.json')。现在那里的服务器也是'dev.domain.com',端口改为80.

当我现在访问我的网站时,它会加载,但尚未收集任何数据,并且仍然有来自“http://dev.domain.com/socket.io/?EIO=3&transport=.....”的 404 错误

问题

解决这最后一部分需要做什么?

求解

所以,我发现应用程序没有连接到套接字,这个错误很明显,但是如果你没有连接,那么调用当然会失败。我将此代码放入 'app.js' 以验证连接

const socket = io.connect('http://dev.domain.com);
alert(socket.connected);

它returns 错误。 url 与 default.json 中的服务器名称相同,所以现在最好查看套接字是否正在侦听。

于是我又试了一个'dirty'的方法,看看能不能行。我制作了文件夹 'public\socket.io' 并将 'socket.io.js' 放入其中。然后它出现了一个访问错误,我通过在 '.htaccess' 中添加 '+Indexes' 来解决它导致日志中出现此消息

[Sun Mar 19 15:11:19 2017] [error] [client 77.174.123.8] ModSecurity: Access denied with code 501 (phase 2). Match of "rx (?:^(?:application\\/x-www-form-urlencoded(?:;(?:\\s?charset\\s?=\\s?[\\w\\d\\-]{1,18})?)??$|multipart/form-data;)|text/xml)" against "REQUEST_HEADERS:Content-type" required. [file "/etc/httpd/modsecurity.d/modsecurity_crs_30_http_policy.conf"] [line "69"] [id "960010"] [msg "Request content type is not allowed by policy"] [severity "WARNING"] [tag "POLICY/ENCODING_NOT_ALLOWED"] [hostname "dev.domain.com"] [uri "/socket.io/"] [unique_id "WM6Rh1TxsZYAAegdFkkAAAAU"]

暂时离开这个方法,寻找不同的路线。

我的 ISP 不允许托管此类内容。所以我要结束这个问题。我会自己托管它,或者找一个有选择权的托管商或托管 docker 图片。