【问题标题】:socket.io.js not found (404)未找到 socket.io.js (404)
【发布时间】:2016-10-06 08:17:32
【问题描述】:

我指的是一个已被多次询问但其他地方发布的解决方案无法解决我的问题的问题,即未找到 socket.io.js。

错误信息是

获取http://127.0.0.1:3000/socket.io/socket.io.js404

任何帮助将不胜感激。

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

【问题讨论】:

    标签: express socket.io


    【解决方案1】:

    您不应该为此使用 socket.io 包,因为它主要用于构建 socket.io 服务器实例。相反,您应该使用专门用作客户端套接字的socket.io-client

    我建议使用bower 来安装它而不是npm,因为 bower 是为前端包管理而设计的。在您的项目目录中执行以下操作

    注意:如果没有安装 bower,则需要全局安装 npm i -g bower

    bower init
    bower install --save socket.io-client
    

    那么您应该将通过安装socket.io-client 创建的bower_components 目录设为静态目录

    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);
    });
    

    【讨论】:

    • 抱歉,我想我需要提供更多信息。有关添加的额外信息,请参见上文。
    • (1) 我认为你的意思是 io = require('socket.io').listen(server),否则会返回错误 (2) 我无法替换我的 client.js文件,因为我的所有代码都在其中,而是我将 src='/socket.io/socket.io.js 替换为 src='/bower_components/socket.io-client' 但它返回文件未找到错误,所以我将其更改为而是引用文件夹内的 socket.io.js 文件,但它返回传输轮询 404 错误。
    猜你喜欢
    • 2013-11-06
    • 2019-05-05
    • 2013-06-03
    • 1970-01-01
    • 2012-04-28
    • 2013-03-03
    • 2013-10-25
    • 2014-10-20
    • 2012-05-20
    相关资源
    最近更新 更多