node.js - 数据库中保存的作者ID,发送数据到前端时如何获取作者姓名
问题描述
从数据库发送数据时,如何将用户 ID 转换为这些用户的用户名?我认为可以使用中间件,但我不知道该怎么做。有我的路线
router.get('/recentQuizzes', async (req, res) => {
const { skip, limit } = req.query
if (skip >= 0 && limit >= 0) {
const quizzes = await Quiz.find({})
.sort({ date: -1 })
.skip(parseInt(skip))
.limit(parseInt(limit))
res.json(quizzes)
}
})
并且作者在DB中保存为ObjecdId userID,创建测验需要用户通过jwt验证,但这些测验可以由其他用户创建。我需要在发送给用户时将 authorID 转换为作者姓名。我也尝试过这样的事情
router.get('/recentQuizzes', async (req, res) => {
const { skip, limit } = req.query
if (skip >= 0 && limit >= 0) {
const quizzes = await Quiz.find({})
.sort({ views: -1 })
.skip(parseInt(skip))
.limit(parseInt(limit))
quizzes.forEach(async item => {
const { username } = await User.findById(item.author)
console.log(username)
item.author = username
})
res.json(quizzes)
}
})
但我的 forEach 函数不会将作者覆盖为其用户名,但 console.logs 正确的用户名
解决方案
尝试使用 map 函数而不是 forEach 来修改测验并获得一个新的修改数组。
let modifiedQuizzes = await Promise.all(quizzes.map(async (item)=>{
const { username } = await User.findById(item.author)
console.log(username)
item.author = username
return item;
})
);
推荐阅读
- ios - 在本地化中改变事物。选项卡栏控制器选择索引引发 NSInternalInconsistencyException
- javascript - 将信息从 Laravel 后端发送到 React 前端,而无需先从前端发出请求
- android - m3u 文件无法从 Xtream 下载并在 IPTV 应用程序中实现
- go - Go 程序内存消耗在 Windows Server 2016 上不断增加
- java - 无法在 android studio 中解析符号 v7 和 appComapat Activity 导入
- php - 如何将包含空格的字符串作为参数传递给查询的 where 子句
- javascript - 你如何阅读和理解这个位移代码?
- javascript - 从vue js中的数组对象获取数组中的id
- python - 为什么 TikTok 网站会阻止 Selenium chromedriver?
- html - 如何根据容器的背景定位按钮?