我指的是多次被问过的问题,但其他地方发布的解决方案并没有解决我的问题,即找不到socket.io.js.
错误消息是
任何帮助都将不胜感激。
我在JADE文件中引用了socket.io.js:
script(src='http://code.jquery.com/jquery.js')
script(src='http://maxcdn.bootstrapcdn.com/bootstrap/3.3.2/js/bootstrap.min.js')
script(src='/socket.io/socket.io.js')
script(src='/javascripts/sockets/client.js') // this is in public folder
在我的App.js文件中:
var express = require('express');
io = require('socket.io');
http = require('http');
app = express();
server = http.createServer(app);
io = io.listen(server);
server.listen(app.get('port'), function(){
console.log("Express server listening on port " + app.get('port'));
});
app.use(express.static(path.join(__dirname, 'public')));
这些是我正在使用的版本:
"express": "~4.13.1",
"jade": "~1.11.0",
"morgan": "~1.6.1",
"serve-favicon": "~2.3.0",
"socket.io": "0.9.10"
其他一些信息: 在我的app.js中:我引用了服务器套接字
// set up our socket server
require('./public/javascripts/sockets/server')(io);
'/ javascripts / sockets / client.js'是我的客户端套接字:
var socket = io.connect('/');
socket.on('message', function (data) {
data = JSON.parse(data);
$('#messages').append('<div class="'+data.type+'">' + data.message +
'</div>');
});
$(function(){
$('#send').click(function(){
var data = {
message: $('#message').val(),
type:'userMessage'
};
socket.send(JSON.stringify(data));
$('#message').val('');
});
答案 0 :(得分:0)
您不应该使用socket.io
包,因为它主要用于构造socket.io服务器实例。相反,您应该使用专门用作客户端套接字的socket.io-client
。
我建议使用bower
来安装此代替npm
,因为bower用于前端程序包管理。在项目目录中执行以下
注意:如果您没有安装bower,则需要在全球范围内进行安装npm i -g bower
bower init
bower install --save socket.io-client
然后你应该通过安装bower_components
静态目录来创建socket.io-client
目录
server.use(express.static(path.join(__dirname, 'bower_components')));
然后改变
script(src='/javascripts/sockets/client.js') // this is in public folder
到
script(src='/bower_components/socket.io-client)
此外,您正在混合server
和app
个变量。您应该使用socket.io
创建的任何变量,在这种情况下,您使用的是server
,因此您应该使用它。您的服务器文件大多不正确,因为您正在实例化许多全局值并且您错误地创建了io
实例。
var express = require('express');
var app = express();
var server = require('http').Server(app);
var io = require('socket.io')(server);
var port = process.env.PORT || 3000;
server.use(express.static(path.join(__dirname, 'public')));
server.use(express.static(path.join(__dirname, 'bower_components')));
server.listen(port, function(){
console.log('Express server listening on port ' + port);
});