node.js - 延迟加载req.user,带有快递和护照?
问题描述
我们正在使用 express 并且对于某些操作想要检查登录用户的详细信息。我们宁愿避免每次填写时都点击数据库req.user
,如果数据被读取,最好只加载数据。API 端点受 JWT 保护,每次访问都会对其进行验证。
有没有办法解决这个问题?
解决方案
有多种解决方案:
您可以将这些详细信息直接放入 JWT 中,因此无需调用 db.xml 即可获得所有这些信息。如果有一些秘密/密码或者如果您需要的数据可以经常更改(因为它在 JWT 中将保持旧直到刷新),则这是不可行的。
最简单的方法就是使用方法。而不是
req.user
callreq.getUser()
或 have functiongetUser(req)
。在该函数中,您可以编写所有业务逻辑,例如 - 检查用户是否已存储在req._user
. 如果是这样,请将其退回。如果没有,请从数据库加载它,将其存储req._user
并返回。是的,有一种方法可以直接从 处理“获取”属性
req.user
,尽管我会避免这种情况并尽可能使用前面的选项之一。如果您有一些带有旧 node.js 的旧代码,则可以使用此已弃用的方法https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/defineGetter如果您使用的是现代node.js,那么这就是现在的方式https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/get
推荐阅读
- generics - 我如何表达函数的类型约束以允许添加不同类型的值?
- javascript - 仅在 JS 中为具有属性的标签设置 CSS 变量
- python - 没有名为 pyinotify 的模块
- mysql - 某个属性的 SQL 更新,连接表
- python - 如何使用 Python 获取 Apple 产品的名称?
- .net - 如何使 .NET 5 上的 ASP.NET Core Web API 在 Azure 上运行?
- python - 使用 Parquet 存储具有嵌套结构的大型时间序列数据的最佳方法
- python - Python - 语音识别库导致 Discord 或 Zoom 的扬声器输出在 Windows 上被切断
- python - 使用 ipywidgets 在我的 jupyter notebook 中选择和上传文件时,为什么会得到 New napi_get_last_error_info?
- lua - 在保存错误时尝试使用“值”索引 nil