nodejs中每个websocket连接的请求级全局变量(对于websockets的res.locals替代)?

时间:2018-02-05 17:54:34

标签: javascript node.js express websocket socket.io

我试图在socket io服务器端库的io.use方法中创建一些全局变量。目的是在整个请求生命周期中提供可用的变量(无论请求在websockets方面是什么意思)。我正在使用express framework和socket.io库。摘录如下: -

<context:property-placeholder location="${catalina.base}/conf/app.properties"/>

我想要的是像websockets的res.locals,即全局变量作用于每个单独的websocket连接。

我在上述代码段中遇到的问题是,这些变量保留了上次收到的请求的值,并且在多个请求中不可靠。

也是,如果我想在每条收到的消息上做基于jwt的身份验证,请使用jwt验证的最佳位置吗?

1 个答案:

答案 0 :(得分:0)

全局变量的用例非常有限。这不是一个。 SocketIO允许您将所有处理程序放入套接字回调中。这很好,因为它允许你关闭你想要的变量:

io.on("connection", function(socket, next) {
  var sid = socket.id;
  var varName = socket.handshake.query.varName;

  socket.on("message", function(){
    console.log(varName);
  });

  //...
});

如果那不是一个选项,那么可能会创建自己的本地对象:

io.use(function(socket, next) {
  socket.locals = {
     sid: socket.id,
     varName: socket.handshake.query.varName
  };
  next();
});

...但是,无论如何我都没有看到复制作为套接字一部分的属性的任何意义。