gpt4 book ai didi

express - 使用 Redis 和 JWT 的 Socket.io 用户 session

转载 作者:可可西里 更新时间:2023-11-01 11:17:07 24 4
gpt4 key购买 nike

谁能帮我理解这部分代码:

  var auth = function(cb) {
return _.wrap(cb, function(fn, data) {
redis.get(email, function(err, id){
if (!err) throw err;
if (!id) return socket.disconnect('unauthorized');
fn(data);
});
});
};

我从这个 article 得到的.

我不明白那里发生了什么,尽管我导航到 lodash 文档并阅读了“wrap”方法。我很困惑,尤其是因为我看不到文章中的什么地方进一步使用了这个“auth”! (我认为这毕竟被定义为在某处使用)。提前谢谢你。

最佳答案

那么,让我们分解一下。首先,我们将一个带有 cb 参数的函数分配给 auth。该函数的作用是什么,嗯,它返回 _.wrap 的结果。查看文档,_.wrap 是一个 currying 函数,所以它需要一个 arg (cb) 和一个函数,并返回一个绑定(bind)了第一个参数的新函数到 arg,其余参数未绑定(bind)。事实上,_.wrap 部分:

return _.wrap(cb, function(fn, data) {
/* code */
fn(data); // inside of the redis scope
})

可能有点矫枉过正,因为你处于外部函数的闭包中,所以你可以这样做:

return function(data) {
/* code */
cb(data) // in the redis callbak scope, but that is still in the closed over scope
}

老实说,我不确定他们为什么不这样做(锤子/钉子?)。

我们继续吧。

因此,我们确定auth 是一个接受cb 参数并返回一个接受data 参数的函数。该函数现在正在调用 redis.get 以查找与存储在 email 中的键关联的值(从周围范围中提取)。然后它调用传入的回调函数(接受错误和 id 的回调函数)验证参数(如果电子邮件在 redis 中没有关联,则断开 websocket 的连接,最后调用原始的 cb 回调传入data参数。

我不确定它在代码中的何处使用,但我的想法是您可以将其称为:

let authCb = auth((data) => { console.log(data) })
authCb('test')

如果在 redis 中找到电子邮件,则 test 应该记录到控制台。在本文的上下文中,您将在实际开始与套接字通信之前使用它来验证连接(在 cb 函数中)

关于express - 使用 Redis 和 JWT 的 Socket.io 用户 session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44999365/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com