Node.js 创建泛型函数,该函数可以代表提供用户ID的mongodb节点返回用户名

Node.js 创建泛型函数,该函数可以代表提供用户ID的mongodb节点返回用户名,node.js,mongodb,asynchronous,mongoose,Node.js,Mongodb,Asynchronous,Mongoose,我想创建一个通用函数,当在该函数上提供userid时,该函数可以返回用户名 我的数据结构如下: { "_id": ObjectId("5a20eb5bcdacc7086ce77427"), "username: "John" } 我已经创建了一个泛型函数,但它返回未定义的,而不是从db返回用户名 var getUserNameByUserID = (id) => { var username = ""; User.find({'_id': id}, {'_id':

我想创建一个通用函数,当在该函数上提供userid时,该函数可以返回用户名

我的数据结构如下:

{
  "_id": ObjectId("5a20eb5bcdacc7086ce77427"),
  "username: "John"
}
我已经创建了一个泛型函数,但它返回未定义的,而不是从db返回用户名

var getUserNameByUserID = (id) => {
    var username = "";
    User.find({'_id': id}, {'_id': 0, 'username': 1})
    .then(data => {
        if (data.length > 0) {
            username = data[0].username;
            //console.log(username);
            return username;
        } else {
            return username;
        }
    })
    .catch(error => {
        return username;
    })
};

//It returns undefined
console.log(getUserNameByUserID('5a20eb5bcdacc7086ce77427'));

非常感谢您的帮助。

您需要在ObjectId中强制转换您的id,如果它是一个字符串,您将不会有结果。

尝试理解JavaScript的本质,您可以使用回调、承诺或异步/等待亲爱的Neil Lunn,我使用与类似问题中提到的相同方法。如果我删除了使用User.find()部分的MongoDB查询,那么它将非常有效。所有问题都在Db查询上。我已经在顶部提到过,即var ObjectId=require('mongodb')。ObjectId;所以这不是一个问题。不,你没有提到它亲爱的,我的意思是这些东西已经在我的代码文件中提到了。这里没有提到我,因为我已经提到了