这里有很多与此主题相关的问题,大多数问题都无关紧要,因为我使用的是express 4.16.4和socket.io 2.2.0。 其次,因为我的示例已经可以在localhost和远程主机上使用。
在我的远程托管服务器上,我可以通过提供三个选项来创建一个nodejs应用程序:
我的准系统示例应用程序安装在/test
中,请参见文件结构:
/test
/node_modules
/lots of folders
index.html
index.js
package.json
/domains/
/mydomain.com
/public_html
index.html
当我转到mydomain.com
并且控制台使用以下参数打印tx received!
时,一切正常:
'test'
''
'index.js'
现在,我希望可以在mydomain.com/test
上访问该应用程序。
但是,当我将应用程序URL从''
更改为'test'
时,io
是未定义的,因为我无法获取文件/socket.io/socket.io.js
。
我仍然得到express提供的索引文件,因为我也进行了更改
app.get("/",
至app.get("/test",
index.js:
var express = require('express');
var app = express();
var server = app.listen(8000);
var socketIO = require('socket.io');
var io = socketIO(server);
app.get("/test", function(req, res) {
res.sendFile( __dirname + "/index.html" );
});
io.on('connection', function(socket){
socket.emit('tx');
});
index.html:
<!doctype html>
<html>
<head>
<script src="/socket.io/socket.io.js"></script>
<script>
var socket = io.connect();
socket.on('tx', function () {
console.log('tx received!');
});
</script>
</head>
<body>
TEST
</body>
</html>
有了Express,当请求__dirname
时,我可以成功地使用app.use()在/test
中提供静态文件。
问题是socket.io做了一些魔术来建立连接,我不知道socket.io是否等效于app.use
。
对于Tnx的长期阅读和任何帮助,我们将不胜感激!
答案 0 :(得分:0)
您可以使用 socket.use()来注册中间件,该中间件是针对每个接收到的Packet都执行的功能。 例如
io.on('connection', (socket) => {
socket.use((packet, next) => {
if (packet.doge === true) return next();
next(new Error('Not a doge error'));
});
});
对于这个特定问题,您只需将socketio导入代码和其他代码导入到一个单独的js文件中,该文件就会导出io对象,以便您可以通过导入来引用要链接到的每个html文件中的代码。脚本。