【问题标题】:NodeJS Express not serving '/socket.io/socket.io.js'NodeJS Express 不提供“/socket.io/socket.io.js”
【发布时间】:2012-11-07 15:27:54
【问题描述】:

我正在尝试构建 NodeJS/Express/SocketIO 应用程序。

进口:

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

配置:

app.configure(function(){
    app.set('port', process.env.PORT || 3000);
    app.set('views', __dirname + '/views');
    app.set('view engine', 'jade');
    app.use(express.favicon());
    app.use(express.logger('dev'));
    app.use(express.bodyParser());
    app.use(express.methodOverride());
    app.use(express.cookieParser('your secret here'));
    app.use(express.session());
    app.use(app.router);
    app.use(express.static(path.join(__dirname, 'public')));
});

在我的 Jade 模板中:

script(type='text/javascript', href='/socket.io/socket.io.js')

但是当我试图访问它时,'/socket.io/socket.io.js' 不可用

http://localhost:3000/socket.io/socket.io.js

正如它所说:

无法获取 /socket.io/socket.io.js

如何从已安装的模块中提供 socket.io.js?

谢谢

【问题讨论】:

    标签: node.js express socket.io


    【解决方案1】:

    您需要将客户端代码从内部 Socket.io 目录复制到您的公共目录。在 Socket 0.9 中,可分发文件的路径是 node_modules/socket.io/node_modules/socket.io-client/dist

    【讨论】:

    • 我正要做出不同的回答,但后来意识到我的项目没有使用 express。我认为你做对了。
    • 这不是一个合适的方法。虽然它有效,但不建议这样做。 Socket.io 已经有适当的构造来拦截和服务/socket.io/socket.io.js 的请求。上面的代码失败了,因为express 实例没有被传递到socket.io 的listen 函数中。
    • 在 socket.io 1.2.0 中,构建位于 node_modues/socket.io/node_modules/socket.io-client/socket.io.js
    【解决方案2】:

    您不必复制任何文件,socket.io 将负责文件的传递。

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

    【讨论】:

    【解决方案3】:

    有错误,使用

    script(type='text/javascript', src='/socket.io/socket.io.js')
    

    而不是

    script(type='text/javascript', href='/socket.io/socket.io.js')
    

    【讨论】:

      【解决方案4】:

      在 Express 3/4 中,您可以像这样初始化 socket.io:

      var io = require("socket.io")(app.listen(80));
      

      【讨论】:

        猜你喜欢
        • 2012-12-24
        • 2013-05-30
        • 1970-01-01
        • 2014-11-20
        • 2014-06-04
        • 2014-02-06
        • 2014-10-20
        • 2013-07-18
        • 2014-12-16
        相关资源
        最近更新 更多