首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何编写自定义中间件并传递到socket-io自定义事件管道?

如何编写自定义中间件并传递到socket-io自定义事件管道?
EN

Stack Overflow用户
提问于 2020-12-02 06:24:13
回答 1查看 549关注 0票数 1

我正在使用socket-io构建一个聊天应用程序。我有很多自定义事件,对于每个事件,我想传递不同的中间件功能?在我的例子中,io.use(somefunction())不起作用!我想将中间件函数传递给这样的自定义事件?io.on('my-custom-event', middleware, function() { ... })

套接字-io路由代码: (路径: /routes/user.js)

代码语言:javascript
复制
module.exports.user_status_info = function (io,socket) {
    socket.on('custom-event', io.use(require('../../middleware/_chat-validation-middlewares/custom-event').validate(io,socket)), function (data, callback) { ... }
}

中间件: (路径:/中间件/自定义事件.)

代码语言:javascript
复制
module.exports.validate = function (io,socket) {
    io.use((socket, next) => {
        console.log("I AM A MIDDLEWARE...")
        next();
    }); }

当我试图在路由管道中传递中间件时,

当前实现抛出错误。

EN

回答 1

Stack Overflow用户

发布于 2020-12-04 08:55:56

您可以使用如下内容:您不必在套接字对象上使用数据,而只能在特定事件上使用数据。

服务器:

代码语言:javascript
复制
  io.use(async (socket, next) => {
try {
  const token = socket.handshake.query.token;
  const payload = await jwt.verify(token, process.env.SECRET_KEY);
  socket.userId = payload.id;
  socket.name = payload.username;
  console.log({ socketisd: socket.userId, name: socket.name });
  next();
} catch (err) { }
});

然后,只需使用套接字对象,稍后获取所需的所有数据。

客户:

代码语言:javascript
复制
      const [socket, setSocket] = React.useState(null);

  const setupSocket = () => {

    const token = sessionStorage.getItem("yourjwtToken");
    if (token && !socket) {
      const newSocket = io("/", {
        query: {
          token,
        },
        path: '/socket'//if you have one
      });

      newSocket.on("disconnect", () => {
        console.log("Socket disconnect");
      });

      newSocket.on("connect", () => {
        console.log("Socket Connected");
      });

      setSocket(newSocket);
    }
  };

  React.useEffect(() => {
    if (currentUser && !socket) setupSocket();
    //eslint-disable-next-line
  }, [socket]);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65103200

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档