node.js - Socket.io io.use 失败 - TypeError : io. use is not a function

标签 node.js socket.io

我正在做一个需要套接字握手 session 的项目,我试图让这段代码工作,我是从 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

最佳答案

我在同样的情况下遇到了同样的问题。尽管您的问题在这里已经有一段时间了,但我还是会发布我的方法。

整个问题是我使用了:

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。

关于node.js - Socket.io io.use 失败 - TypeError : io. use is not a function,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34829490/

相关文章:

node.js - 错误 : ENOENT: no such file or directory, 打开 'C :\USER\family\Desktop\index\https-app\sever\ssl\ssl\server. crt

javascript - WebRTC 无法在控制台上的 RTCPeerConnection 错误上执行 'addIceCandidate' 但仍可以显示远程和本地视频

javascript - Node.js:删除 Socket.IO 中的用户

javascript - Socket.io 与本地客户端。 Origin null 和 Access-Control-Allow-Origin

javascript - 在 NodeJS 中使用 BETWEEN 子句

javascript - Emacs:在 etags 中查找函数定义

node.js - AWS 开发工具包实例创建不接受 AMI ID

javascript - NodeMailer 服务器上没有任何响应

node.js - socket.io 发出回调合适吗?

javascript - 没有 Socket.IO 的 Node.js 聊天