NodeJS 发送混洗数据作为 API 响应
NodeJS sending shuffled data as API response
我写了一个 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
})
我写了一个 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
})