Socket.io io.use失败 - TypeError:io.use不是函数

时间:2016-01-16 16:48:04

标签: node.js socket.io

我正在开发一个需要套接字握手会话的项目我正试图让这段代码正常工作,我是从https://www.npmjs.com/package/express-socket.io-session获得的

var app = require('express')(),
  server  = require("http").createServer(app),
  io = require("socket.io")(server),
  session = require("express-session")({
    secret: "my-secret",
    resave: true,
    saveUninitialized: true
  }),
  sharedsession = require("express-socket.io-session");


// Attach session
app.use(session);

// Share session with io sockets

io.use(sharedsession(session));

io.on("connection", function(socket) {

    // I've add this one...
    console.log(socket.handshake.session);

    // Accept a login event with user's data
    socket.on("login", function(userdata) {
        socket.handshake.session.userdata = userdata;
    });
    socket.on("logout", function(userdata) {
        if (socket.handshake.session.userdata) {
            delete socket.handshake.session.userdata;
        }
    });        
});

server.listen(3000);

我跑了,首先我得到了这个

var io = require("socket.io")(server);
                             ^

TypeError: require(...) is not a function
    at Object.<anonymous> (/Users/Jack/Root/Sites/Scopone/provaric/server.js:8:30)
    at Module._compile (module.js:435:26)
    at Object.Module._extensions..js (module.js:442:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:313:12)
    at Function.Module.runMain (module.js:467:10)
    at startup (node.js:136:18)
    at node.js:963:3

解决了添加

io = require(“socket.io”)。listen(server);

然后我得到了这个

io.use(function(socket, next) {
    ^

TypeError: io.use is not a function
    at Object.<anonymous> (/Users/Jack/Root/Sites/Scopone/provaric/server.js:15:5)
    at Module._compile (module.js:435:26)
    at Object.Module._extensions..js (module.js:442:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:313:12)
    at Function.Module.runMain (module.js:467:10)
    at startup (node.js:136:18)
    at node.js:963:3

有任何解决此问题的想法吗?

socket.io@0.9.17

2 个答案:

答案 0 :(得分:5)

我在同一个环境中遇到了同样的问题。即使你的问题已经存在了一段时间,我也会发布我的方法。

整个问题是我使用过:

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

但应该是:

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

其他一切在最后都没有那些括号,但显然io.use没有。

而不是传递服务器我做了:

app.io = io;

在/ bin / www

  app.io.attach(server);

希望这对某人有用。

更新:我使用Socket 1.5.2。

答案 1 :(得分:0)

我解决了升级nmp,node.js和socket.io的问题。但要做到这一点,我必须找出我所有的依赖关系搞砸了:有了那些错误我无法升级软件包..