【问题标题】:GET http://localhost:3000/socket.io/socket.io.js 404 (Not Found)获取 http://localhost:3000/socket.io/socket.io.js 404(未找到)
【发布时间】:2013-06-03 14:25:27
【问题描述】:

我正在尝试将数据流式传输到浏览器。但是,我正在努力将其连接到浏览器。这是我的html:

<ul class="tweets"></ul>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
<script src="/socket.io/socket.io.js"></script>
<script>
    var socket = io.connect();
    jQuery(function ($) {
        var tweetList = $('ul.tweets');
        socket.on('tweet', function (data) {
            tweetList .prepend('<li>' + data.user + ': ' + data.text + '</li>'); 
        }); 
    });
</script>

这是我的 app.js 的相关部分:

var express = require('express')
    , twitter = require('ntwitter')
  , http = require('http')
  , path = require('path');

var app = express();

var io = require('socket.io').listen(app);

app.get('/', function (req, res) { res.sendfile(__dirname + '/index.html'); });

app.listen(app.get('port'), function(){
   console.log("Express server listening on port " + app.get('port'));
});

io.sockets.volatile.emit('tweets', {
            user: data.user.screen_name,
            text: data.text,
            geo : geo,
            latitude: latitude,
            longitude: longitude
                });

我通过 packages.json 文件安装了 socket.io 0.9.16:

"dependencies": {
    "express": "3.2.6",
    "jade": "*",
    "ntwitter":"0.2.10",
    "socket.io":"0.9.x"
  }

有人可以帮我吗?为什么找不到文件?

挖得更深一点。为了测试套接字,我把它放在 app.js 中:

var socket = io.listen(app);

我得到了错误:

TypeError: Object #<Manager> has no method 'listen'
    at Object.<anonymous> (/home/andy/dev/node/mytwittermap/app.js:49:17)
    at Module._compile (module.js:456:26)
    at Object.Module._extensions..js (module.js:474:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Function.Module.runMain (module.js:497:10)
    at startup (node.js:119:16)
    at node.js:901:3

【问题讨论】:

    标签: node.js socket.io


    【解决方案1】:

    你可以试试这个:

    var http = require('http');
    var app = express();
    var server = http.createServer(app);
    
    var io = require('socket.io').listen(server);
    

    我猜,你必须实例化 socket.io 服务器。

    【讨论】:

    • 太棒了 - 现在似乎可以正常工作了(控制台中有很多很好的调试信息)。现在谈谈为什么它没有显示在浏览器中。非常感谢您的帮助。
    【解决方案2】:

    您的设置需要如下所示:

    var app     = express();
    var server  = require('http').createServer(app);
    var io      = require('socket.io').listen(server);
    ...
    server.listen(app.get('port')); // not 'app.listen'!
    

    【讨论】:

    • 谢谢,你的台词:“// not 'app.listen'!” 帮了大忙!!
    • 感谢“不是 app.listen”
    • 2016 年在这里。我有同样的错误。细节发生了变化,但我们需要做的部分server.listen(不在应用程序上)仍然有效。谢谢!
    • @sra 你能看看我刚刚发布的这个吗? stackoverflow.com/questions/40659396/…
    • (socket.io).listen 不起作用,必须直接输入 (socket.io)(server)
    【解决方案3】:
    • 你需要实例化socket.io连接和
    • 您需要使用server.listen() 而不是app.listen()

    试试这样的:

    // at the top of app.js
    var app     = express();
    var server  = require('http').createServer(app);
    var io      = require('socket.io').listen(server);
    
    // your code
    
    // at the bottom of app.js
    server.listen('3000', () => {
      console.log('Server listening on Port 3000');
    })
    

    【讨论】:

      猜你喜欢
      • 2016-03-18
      • 1970-01-01
      • 2013-11-06
      • 2016-08-06
      • 2021-09-14
      • 2021-10-31
      • 1970-01-01
      • 1970-01-01
      • 2021-03-11
      相关资源
      最近更新 更多