javascript - NodeJS 发送混洗数据作为 API 响应

标签 javascript node.js api node-async

我编写了一个 API 端点,它在通过包含 n 个用户 ID 的数组后,将 n 个用户的用户名作为响应发回。这是我正在谈论的代码,

//Fetch username of user
app.post('/users/uname', (req, res) => {
    const uidArr = req.body.uid
    const len = uidArr.length
    var unameArr = []
    for(var i=0;i<len;i++){
        User.findById(uidArr[i]).then((user) => {
            if(!user){
                unameArr[i] = ""
            }

            unameArr.push(user.username)
            if(unameArr.length==len){
                res.send(unameArr)
            }
        }).catch((error) => {
            unameArr[i] = ""
        })
    }
})

我在 MongoDB 数据库中有两个用户,用户名为“user_one”和“user_two”。当我使用 Postman 向此端点发送 API 请求时,我收到的响应会被打乱。这是一个例子,

我传递以下数组,

{
    "uid": [ "5e481bd2151b8f156208c9dc", "5e481bd2151b8f156208c9dc", "5e481a4322495115113c1b46", "5e481bd2151b8f156208c9dc", "5e481bd2151b8f156208c9dc", "5e481a4322495115113c1b46" ]
}

我期望的请求是基于元素在作为请求发送的数组上的位置,

[
    "user_one",
    "user_one",
    "user_two",
    "user_one",
    "user_one",
    "user_two"
]

但我得到的实际输出是混合的,如 Postman 的屏幕截图所示,

API Call one | API Call two | API Call three

这个问题背后的原因是什么,我该如何解决这个问题?

最佳答案

const uidArr = req.body.uid
let uids = []
User.find({},{'username':1,"_id":0})
.where('_id')
.in(uidArr)
.then(docs=>{
    docs.forEach(doc=>uids.push(doc.username))
    console.log(uids) //send this back to client
})

关于javascript - NodeJS 发送混洗数据作为 API 响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60246073/

相关文章:

javascript - 带有可排序 UI 的 jQuery 拖放不起作用

javascript - Redis 使用 sync/await 关键字

c# - MVC API 在正文中发送数据

javascript - 如何在旧的之上显示更新的谷歌地图信息窗口

来自其他输入的 Javascript 调用值

javascript - 主题与匿名主题

javascript - 防止 JavaScript 中使用迭代的嵌套回调

node.js - 我如何将 pouchdb 与 typescript 一起使用?

rest - Sentry api 身份验证问题

ios - 更新 block 内的 UI