找不到socket.io.js(404)

时间:2016-06-06 16:16:29

标签: express socket.io

我指的是多次被问过的问题,但其他地方发布的解决方案并没有解决我的问题,即找不到socket.io.js.

错误消息是

  

获取http://127.0.0.1:3000/socket.io/socket.io.js 404

任何帮助都将不胜感激。

我在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('');
});

1 个答案:

答案 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)

此外,您正在混合serverapp个变量。您应该使用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);
});