我有socket.io示例的问题.我的浏览器无法获取socket.io.js文件(控制台中出现404错误).
有效的代码:
server.js
var app = require('express').createServer()
, io = require('socket.io').listen(81);
app.listen(80);
app.get('/', function (req, res) {
res.sendfile(__dirname + '/index.html');
});
io.sockets.on('connection', function (socket) {
socket.emit('news', { hello: 'world' });
socket.on('my other event', function (data) {
console.log(data);
});
});
Run Code Online (Sandbox Code Playgroud)
的index.html
<script src="http://192.168.1.104:81/socket.io/socket.io.js"></script>
<script>
var socket = io.connect('http://192.168.1.104:81');
socket.on('news', function (data) {
console.log(data);
socket.emit('my other event', { my: 'data' });
});
</script>
Run Code Online (Sandbox Code Playgroud)
但这不是:
server.js
var app = require('express').createServer()
, io = require('socket.io').listen(app);
app.listen(80);
app.get('/', function (req, res) {
res.sendfile(__dirname + '/index.html');
});
io.sockets.on('connection', function (socket) {
socket.emit('news', { hello: 'world' });
socket.on('my other event', function (data) {
console.log(data);
});
});
Run Code Online (Sandbox Code Playgroud)
的index.html
<script src="http://192.168.1.104:80/socket.io/socket.io.js"></script>
<script>
var socket = io.connect('http://192.168.1.104:80');
socket.on('news', function (data) {
console.log(data);
socket.emit('my other event', { my: 'data' });
});
</script>
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我的浏览器无法获取socket.io.js文件.
编辑:以下所有文字都是错误的,直到下一个"编辑".把它留在那里作为痕迹......
你应该知道一件事,你应该做的两件事+所有需要的快递文件在这里:
最重要的是:在express中声明一个静态的,非"计算"的文件夹,你将放置所有静态文件(css,客户端脚本,图像):
app.use('/static', express.static(__dirname + '/static'));
这条线必须放在你的app.configure电话中,之前app.use(app.router)(我实际把它放在第一位)
我喜欢这个/ static/scripts;/static/css;/static/img文件夹组织,但您可以自由地适应您的需求.
将socket.io脚本文件的链接更改为相对路径(可选但强烈建议): src='/static/scripts/socket.io/socket.io.js'
编辑:我错了,非常非常错,我很抱歉.Socket.io生成所需的不同路径/文件,您不必声明它们,也不必复制任何客户端脚本文件.
请尝试将<script src="http://192.168.1.104:81/socket.io/socket.io.js"></script>客户端线路切换到正常的相对线路,<script src="/socket.io/socket.io.js"></script>因为这是您的代码和快速指南代码之间的唯一区别.
什么快递版本您使用的?
API已经从Express 2.x更改为3.x,所以答案是在从2.x迁移到3.x wiki 的Socket.IO兼容性部分:
Socket.IO的.listen()方法将http.Server实例作为参数.
从3.x开始,返回值express()不是http.Server实例.要使Socket.IO与Express 3.x一起使用,请确保手动创建并将您的http.Server实例传递给Socket.IO的.listen()方法:
var app = express()
, http = require('http')
, server = http.createServer(app)
, io = require('socket.io').listen(server);
server.listen(3000);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14812 次 |
| 最近记录: |