首页 > 解决方案 > 数据库中保存的作者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 正确的用户名

标签: node.jsmongodbexpress

解决方案


尝试使用 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;
})

);


推荐阅读