NodeJS Express不提供'/socket.io/socket.io.js'

Max*_*huk 9 node.js express socket.io

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

进口:

var     express     = require('express')
    ,   app         = express()
    ,   server      = require('http').createServer(app)
    ,   io          = require('socket.io').listen(server)...
Run Code Online (Sandbox Code Playgroud)

组态:

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')));
});
Run Code Online (Sandbox Code Playgroud)

在我的Jade模板中:

script(type='text/javascript', href='/socket.io/socket.io.js')
Run Code Online (Sandbox Code Playgroud)

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

http://localhost:3000/socket.io/socket.io.js
Run Code Online (Sandbox Code Playgroud)

正如它所说:

不能GET /socket.io/socket.io.js

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

谢谢

Nel*_*son 5

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

  • 这不是一个合适的方法.虽然它有效,但不建议.Socket.io已经有了构造来拦截并在`/ socket.io/socket.io.js`中提供请求.上面的代码失败了,因为`express`实例没有传递给socket.io的`listen`函数. (6认同)

Jul*_*gan 5

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

var express = require('express'),
    app     = new express(),
    server  = require('http').createServer(app),
    io      = require('socket.io').listen(server)
Run Code Online (Sandbox Code Playgroud)