我们正在使用express,对于某些操作,我们希望检查已登录用户的详细信息。我们宁愿避免每次命中DB来填充req.user
的情况,最好只读取读取的数据。 API端点受JWT保护,该保护在每次访问时都会得到验证。
有办法解决吗?
答案 0 :(得分:0)
有多种解决方案:
您可以将这些详细信息直接放入JWT中,因此无需调用db就可以获取所有这些信息。如果存在一些秘密/密码,或者您需要的数据可以经常更改(因为它将在JWT中保持旧状态直到刷新),这是不可行的。
最简单的方法就是使用method。代替req.user
调用req.getUser()
或使用函数getUser(req)
。在该函数内部,您可以编写所有业务逻辑,就像-检查用户是否已经存储在req._user
中。如果是这样,请将其退回。如果不是,请从db加载它,并将其存储到req._user
并返回。
是的,有一种方法可以直接从req.user
处理“获取”属性,尽管我会避免这种情况,并在可能的情况下使用前面的选项之一。如果您使用旧的node.js编写了一些旧代码,那么如果使用的是现代的node.js,则可以使用不推荐使用的方法https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/defineGetter,那么现在https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/get