2014-10-12 55 views
0

我无法连接到socket.io。使用下面的代码,我一直在浏览器控制台上收到'io is not defined'错误。任何人都知道我在这里做错了什么?我一直在关注着计算器了几个小时,但没有解决办法似乎工作...Node + Socket.io连接问题

服务器端:

,db = require("../../lib/db") 
,config = require("../../config") 
,app = require("../index") 
,io = require('socket.io')(app); 
; 
io.on('connection', function (socket) { 
    console.log('connected') 
}); 

exports.render = function(req, res){ 
    console.log(io) 
    res.render("vitron", {}); 
} 

客户端:

<!doctype html> 
<html> 
<head> 
<title>Sockets</title> 
<script src="/socket.io/socket.io.js"></script> 
<script> 
var socket = io.connect('http://localhost'); 
socket.on('news', function (data) { 
console.log(data); 
socket.emit('my other event', { my: 'data' }); 
}); 
</script> 
</head> 
<body> 
</body> 
</html> 
+0

检查浏览器错误日志,以便查看是否有一个错误加载'/socket.io/socket.io.js'。如果存在,那么问题是你的'socket.io'初始化服务器端缺少一个中间件调用,它将在请求时将socket.io.js文件提供给客户端。除非您执行正确的中间件初始化,否则不会自动提供。在socket.io文件中有很多例子来说明如何初始化事物。 – jfriend00 2014-10-12 01:20:27

+0

感谢您的帮助!我确实有以下错误: GET http:// localhost:4602/socket.io/socket.io.js 对于我的无知感到抱歉,但是您指的是什么样的中间件调用? – austin809 2014-10-12 01:23:25

+0

这告诉你,你没有正确的服务器端初始化,所以你的应用服务器自动提供'/ socket.io/socket.io.js'文件。 – jfriend00 2014-10-12 01:24:46

回答

0

你显然不具备正确的服务器端初始化,以便您的服务器将自动服务于/socket.io/socket.io.js文件。

有很多方法可以做到这一点,但在socket.io文档中记录的最简单的方法是使用一些内置的中间件,该中间件将使socket.io服务器端库自动拦截对/socket.io/socket.io.js文件并提供脚本文件。

socket.io文档显示了如何在使用express与节点时完成此操作。如果你不使用快递,那么你可以用你自己的中间件来做。或者,如果您只是使用普通节点,则必须自己处理该路线,或者只需将/socket.io/socket.io.js文件放在可直接请求的已知位置。如果需要,您甚至可以在CDN上链接到它,但是使用内置方案有一个优势,因为在升级服务器上的socket.io库时,它会自动包含匹配的客户端库这很好。

我不知道你的总体格局是什么,但这里是我的socket.io初始化与快递4.

var express = require('express'); 
var app = express(); 
var server = app.listen(8081, function() { 
    console.log(new Date().toISOString() + ": server started on port 8081"); 
}); 
var io = require('socket.io').listen(server);