0

我目前正在开发一个个人项目,因此我可以使用 node.js 和 mongodb,因为我以前从未使用过它们。

我目前有一个问题,我无法弄清楚如何从以下函数中返回 true 或 false:

function checkRefreshToken(token) {
    MongoClient.connect(url, { useUnifiedTopology: true } ,function(err, db) {
        if (err) throw err;
        var dbo = db.db("database");
        dbo.collection("collection").findOne({ token: token }, function(err, result) {
            if (err) throw err;
            if (result !== null) {
                db.close();
                return true;
            } else {
                db.close();
                return false;
            } 
        });
    });
}

该函数所做的只是检查集合中是否存在令牌。但是,我不能从函数返回真或假——它总是返回未定义的。我认为这是因为返回值位于“findOne()”函数内部。

我正在寻找的是如何返回 true 或 false 以便我可以像这样使用该函数:

if (checkRefreshToken("abc")) {
    // Do something
}

谢谢 :)

PS 抱歉,如果这是一个简单的解决方法,就像我说这是我第一次真正使用 node 和 mongo

4

1 回答 1

1

像这样将代码包装在函数中

function checkRefreshToken(token) {
    return new Promise((resolve, reject) => {
        MongoClient.connect(url, { useUnifiedTopology: true }, function (err, db) {
            if (err) throw err;
            var dbo = db.db("database");
            dbo.collection("collection").findOne({ token: token }, function (err, result) {
                if (err) {
                    //throw err;
                    reject(err);
                }
                if (result !== null) {
                    db.close();
                    resolve(true);
                } else {
                    db.close();
                    resolve(false);
                }
            });
        });
    });
}

然后在调用此函数的位置使函数异步,例如在其前面使用await。

async function() {
    //your code
    const response = await checkRefreshToken("abc");
    if (response) {
        // Do something
    }
}
于 2021-01-11T03:43:47.110 回答