在node.js中返回undefined的函数,在函数中我有mongoDB.connect

xoefb8l8  于 2023-01-01  发布在  Go
关注(0)|答案(2)|浏览(130)

我试着在服务中为我的项目创建函数。这个服务需要检查用户是否存在于我的数据库中,但是我的函数(这个函数正在检查)在类中返回未定义的
这是我的代码:

const express = require("express");
const mongoDB = require('mongodb').MongoClient;
const url = "here I paste url to my databse(everything is good here)";

class CheckService {

    isUserExists(username) {
        mongoDB.connect(url, (error, connection) => {
            if (error) {
                console.log("Error", '\n', error);
                throw error;
            }

            const query = {name: username};

            const db = connection.db("users");

          const result =  db.collection("users").find(query).toArray(
                function findUser(error, result) {
                    if (error) {
                        throw error;
                    }
                    const arr = [];
                    if (result.value === arr.value) {
                        console.log(false);
                        connection.close();
                        return false;
                    } else {
                        console.log(true);
                        console.log(arr);
                        console.log(result);
                        connection.close();
                        return true;
                    }

                });

           console.log(result);

        });
    }

}

module.exports = new CheckService();

我已将我的服务导入到另一个服务:

const checkService = require('./check.service');

在此之后,我从服务中调用函数,如下所示:

console.log('function:',checkService.isUserExists(username));

我期待好的结果,但函数不返回,我想要的,不幸的是.

    • 请帮帮我**
ovfsdjhp

ovfsdjhp1#

您的函数存在两个问题
1.它不返回任何内容

  1. toArray()是一个承诺,因此您的console.log可能只打印了一个承诺。
    也许你正在寻找这样的东西:
class CheckService {

    async isUserExists(username) {
        const connection = await mongoDB.connect(url);
        const query = {name: username};
        const db = connection.db("users");
        const result = await db.collection("users").find(query).toArray();
        connection.close();
        return result.length !== 0;
    }

}

然后用类似于

await new CheckService().isUserExists(username);

不过,值得注意的是,您可能不需要toArray,而可以使用findOne甚至count(),因为您关心的只是存在。我可能也不会每次都示例化一个新连接(但这并不是非常相关)

wko9yo5t

wko9yo5t2#

这里有两个错误。首先,第一个注解是正确的。你只记录结果,而不返回给调用者。其次,快速浏览一下mongo文档,你会发现检索方法是有承诺的。你需要使函数异步,并在需要的地方添加等待。
蒙古语:https://www.mongodb.com/docs/drivers/node/current/fundamentals/crud/read-operations/retrieve/
承诺:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise

相关问题