【问题标题】:Socket.io io.use fails - TypeError: io.use is not a functionSocket.io io.use 失败 - TypeError: io.use is not a function
【发布时间】:2016-04-22 03:13:27
【问题描述】:

我正在做一个需要套接字握手会话的项目

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

【问题讨论】:

  • 你能升级socket.io吗? 0.9.17 现在已经非常老了。
  • @slugonamission 我已经用 npm v3.3.12 下载了最新的 node.js v5.4.1 .. 我已经卸载了 socket.io 并运行 npm install socket.io: 当我检查套接字时带有 npm list socket.io 的版本,我仍然得到 socket.io@0.9.17.. 你有什么建议?
  • @slugonamission 我尝试使用 npm install socket.io@1.4.3 进行安装,它成功了,但我得到了这个 --- sudo npm install socket.io@1.4.3 chat@0.0 .1 /Users/Jack/Root/Sites/Scopone/provaric └─┬ socket.io@1.4.3 无效..... npm WARN EPACKAGEJSON chat@0.0.1 许可证应该是有效的 SPDX 许可证表达式

标签: node.js socket.io


【解决方案1】:

我在相同的上下文中遇到了同样的问题。即使您的问题在这里有一段时间,我也会发布我的方法。

整个问题是我使用了:

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。

【讨论】:

  • "socket.io": "^3.0.3" 遇到同样的问题使用const io = require('socket.io')(); 修复了它
  • 我合法地在 3.0.3 中遇到了这个错误,而直到 'npm update' 才出现这个错误
  • socket.io 4.2.0 版仍然需要此修复程序才能在 nodejs 中导入
【解决方案2】:

我已经解决了升级 nmp、node.js 和 socket.io 的问题。但要做到这一点,我必须发现我的所有依赖项都搞砸了:这些错误我无法升级包..

【讨论】:

    猜你喜欢
    • 2018-10-04
    • 1970-01-01
    • 2021-11-16
    • 1970-01-01
    • 1970-01-01
    • 2015-06-24
    • 1970-01-01
    • 2021-01-21
    • 2021-10-01
    相关资源
    最近更新 更多