我试着在服务中为我的项目创建函数。这个服务需要检查用户是否存在于我的数据库中,但是我的函数(这个函数正在检查)在类中返回未定义的。
这是我的代码:
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));
我期待好的结果,但函数不返回,我想要的,不幸的是.
- 请帮帮我**
2条答案
按热度按时间ovfsdjhp1#
您的函数存在两个问题
1.它不返回任何内容
toArray()
是一个承诺,因此您的console.log可能只打印了一个承诺。也许你正在寻找这样的东西:
然后用类似于
不过,值得注意的是,您可能不需要
toArray
,而可以使用findOne
甚至count()
,因为您关心的只是存在。我可能也不会每次都示例化一个新连接(但这并不是非常相关)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