MongoError:拓扑已关闭,尽管已建立数据库连接,仍请连接

2024-03-28

我正在编写一个 Web 应用程序,它使用异步数据库请求作为 api 的一部分。目前,我有一个异步快速路由,等待异步函数返回函数。这两个函数都返回布尔值并且都查询数据库。第一个可以正常工作,但第二个却不能。

这是 MongoClient 设置:

const MongoClient = require('mongodb').MongoClient;
const uri = config.uri;                         // Contains custom url for accessing database
const client = new MongoClient(uri, { useUnifiedTopology: true}, { useNewUrlParser: true }, { connectTimeoutMS: 30000 }, { keepAlive: 1});

其中 config 来自导入为的文件。

const config = require("./config.js");

并正常运行。

这是快速设置:

app.post("/signup", async function(request, response) {
  log("POST request at /signup");

  log("BEFORE UNIQUE USER");
  const isUniqueUser = await validateUniqueUser(request.body.email, request.body.password);
  log(isUniqueUser);
  const status = {
    status: null
  };
  if (isUniqueUser) {
    log("AFTER UNIQUE USER");
    let userCreated = await createPracticeProfile(request.body.email, request.body.password);
    log("user created: " + userCreated);
    if (userCreated) {
      status.status = "user_created";
    }
    response.json(status);
  } else {
    response.json(status);
  }

  console.log("********************************end");
});

控制台输出:

在唯一用户之前

正确(应该如此)

独特用户之后

MongoError:拓扑已关闭。

用户创建:未定义

***...***结尾

这是验证用户是否唯一的函数:

/*  VALIDATE_UNIQUE_USER
USE: ensure user does not have existing profile
PARAMS: email (string), password (string)
RETURN: isUniqueUser (bool)
*/
async function validateUniqueUser(email, password) {
  // connect to database
  const database = await client.connect().catch(err => {
    log("ERROR while connecting to database at: validateUniqueUser");
    console.log(err);
    client.close();
  });

  // database connection failed
  if (!database) {
    return false;
  }

  // connection successful => find user
  let user;
  try {
    user = await database.db("guitar-practice-suite").collection("users").findOne({email: email});
  } catch(err) {
    log("ERROR while finding user in database at: validateUniqueUser");
    console.log(err);
    client.close();
    return false;
  } finally {
    client.close();
    // user not found (unique)
    if (user === null || user === undefined) {
      return true;
    }
    return false;
  }
}

这是将用户插入集合的函数:

/* CREATE_PRACTICE_PROFILE
USE: insert a practice profile into the database
PARAMS: email (string), password (string)
RETURN: userCreated (bool)
*/
async function createPracticeProfile(email, password) {
  // hash password
  let hashedPassword;
  try {
    hashedPassword = await new Promise((resolve, reject) => {
      bcrypt.hash(password, null, null, function(err, hash) {
        if (err) {
          reject(err);
        }
        resolve(hash)
      });
    });
  } catch(err) {
    log("ERROR while hashing password at: createPracticeProfile");
    console.log(err);
    return false;
  }

  // connect to database
  const database = await client.connect().catch(err => {
    log("ERROR while connecting to database at: validateUniqueUser");
    console.log(err);
    client.close();
  });

  // database connection failed
  if (!database) {
    return false;
  }

  // database connection successful => insert user into database
  let insertUserToUsers;
  let insertUserToExercises;
  let insertUserToCustomExercises;
  try {
    insertUserToUsers = await database.db("guitar-practice-suite").collection("users").insertOne({email: email, password: hashedPassword});
    insertUserToExercises = await database.db("guitar-practice-suite").collection("exercises").insertOne({email: email});
    insertUserToCustomExercises = await database.db("guitar-practice-suite").collection("custom-exercises").insertOne({email: email, exercises: []});
  } catch(err) {
    log("ERROR while inserting user into database at: createPracticeProfile");
    console.log(err);
    client.close();
    return false;
  } finally {
    client.close();
    return insertUserToUsers && insertUserToExercises && insertUserToCustomExercises;
  }
}

我已经找到了问题的解决方案,但我不确定我是否理解其推理。 这client.close()在 validateUniqueUser 函数的 finally 块中。在 createPracticeProfile 函数中的连接完成插入用户之前,它正在关闭连接。

当该行被取出时,该功能就可以工作。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MongoError:拓扑已关闭,尽管已建立数据库连接,仍请连接 的相关文章

  • 如何使用 JKS 证书进行 NODE https 客户端请求

    我想在 NodeJS 应用程序中使用来自 JKS 密钥库的证书 var fs require fs var https require https var options hostname XXX com port 4443 path en
  • AWS lambda 基本身份验证,无需自定义授权者

    我在为用 Node js 编写的 AWS lambda 函数设置基本身份验证时遇到问题 问题 AWS lambda 函数是附加服务的代理 该函数仅转发整个请求并向用户提供整个响应 这就是为什么我需要强制使用Authentication标题
  • mongodb Nodejs Each 与 toArray

    我快速浏览了一下 没有找到任何令我满意的答案 但基本上我已经开始使用带有express和mongodb的node js来创建webapi 而不是通常的 Net MVC Web API路线 但我注意到的一件事是 为了返回结果集合 我正在以相当
  • 具有异步函数的 JavaScript 数组

    我有一个 JavaScript 字符串数组 该数组的定义如下 var myArray myArray push 1 myArray push 2 myArray push 3 我需要循环遍历数组并调用异步运行的函数 该函数如下所示 func
  • 需要一些异步调用的单例类

    我有一个单例类 它在其构造上加载一些数据 问题是加载这些数据需要调用async方法 但构造函数不能async 换句话说 我的班级具有以下结构 public class Singleton private static Singleton i
  • Grails 与 MongoDB、对象 id 和脚手架

    我使用集成测试和 Grails 脚手架将数据写入 mongoDB 数据库时遇到问题 当尝试从 列表 类型页面中选择域实例时 我收到错误 未找到 id null 的 域名 我确信这是因为 Grails url controller actio
  • NodeJS 连接到 SQL Server getaddrinfo ENOTFOUNT

    我正在尝试使用 Knex js 连接到 Microsoft SQL Server 但收到 getaddrinfo ENOTFOUND 我知道这表明 NodeJS 无法解析地址 通常是通过 DNS 或协议问题 const knex requi
  • 如何在meteor中建立单独的测试和开发数据库

    我已经为我的流星应用程序编写了一些测试 由于他们具有删除所有文档或填充新文档的设置和拆卸方法 因此我想在专用于测试的数据库上运行它们 我注意到数据库存储在 meteor local db 中 理想情况下 我希望从不同的端口访问 db tes
  • 为什么要使用 Node.js 安装服务器(Nginx、Apache...)? [复制]

    这个问题在这里已经有答案了 可能的重复 为什么 Node js Express Web 框架下需要 apache https stackoverflow com questions 9287747 why do we need apache
  • 即席查询/更新是否开始影响您使用 MongoDB 的工作效率?

    我开发一个 ASP MVC 网站已经快一年了 现在完全在 mongodb 上 我大部分时间都喜欢它 使用 C mongodb 驱动程序和 mongovue 等工具 开发效率非常高 然而 我已经开始达到这样一个地步 有些事情我真的希望我有一个
  • Nest JS构建不会生成dist文件夹

    我已经用nest js实现了rest api项目 它在本地环境中运行良好 pm start 我想构建并部署它 但构建命令不会生成dust文件夹 以下是我的配置 tsconfig json compilerOptions module com
  • 如何在 Visual Studio Code 中的事件上使用 JSDoc 自定义 EventEmitter?

    我一直致力于 Node js 项目 只是注意到 Visual Studio Code 提供了有关基本 EventEmitter 对象的信息 所以我想也应该可以为自定义提供 JSDoc 我已经尝试遵循 JSDochttp usejsdoc o
  • 为什么同步上下文不适用于等待?

    这个答案 https stackoverflow com a 21839382 2631076 says 默认情况下 await 运算符将捕获当前 上下文 并使用它来恢复异步方法 我正在我的控制台应用程序中尝试此代码 static void
  • 无法使用 Mockito 模拟 MongoTemplateexecuteQuery

    我正在寻找模拟 MongoTemplate 以便可以实际调用我的服务中的executeQuery 函数 这就是我的服务代码块的样子 this mongoTemplate executeQuery query collectionName n
  • 产生 ENOENT node.js 错误

    我已经使用express generator启动了一个node js应用程序 我有一个奇怪的问题 我无法通过浏览器查看页面两次 第一次加载正常 第二次加载失败 因为节点进程以出现以下错误 GET 304 412ms events js 72
  • 我应该在 mongodb 中对布尔标志使用稀疏索引吗?

    我有一个布尔标志 finished 我是不是该 A index finished 1 B index finished 1 sparse true C use flag unfinished instead to query by that
  • 需要新版本后 Firebase 参考为空

    The new 文档 https firebase google com docs database server start authenticate with admin privileges提供了一种初始化 firebase 的简单方
  • 节点护照错误:未知的身份验证策略“本地登录”

    我一直在尝试在nodejs上使用passport进行本地身份验证工作 据我所知 我的所有代码都是正确的 但我不断收到关于 未知身份验证策略 的相同恼人错误 所以也许其他人可以帮助我解决这个问题我的代码如下所示 这是我在nodejs中配置护照
  • NodeJS 快速会话 req.session 未定义

    我正在开发一个简单的登录系统 但会话似乎没有保存 我编写了一个简单的代码进行测试 谁能告诉我它有什么问题吗 我正在运行登录 之后我正在运行 is logged 但我从未登录并且两个会话都未定义 var port process env PO
  • 无法使用“in”运算符在中搜索“_id”

    我正在尝试使用 mongoose 和express 来获取现有的用户文档 但我只得到这个 webroot api domain com production node modules mongoose lib document js 162

随机推荐

  • 如何将 HTML 内容传递到 MVC-Razor 中的部分视图(如“for”块)

    我在我的应用程序中使用 Chromatron 主题作为管理面板 有一个侧边栏小工具 其中包含 HTML 内容 通过一点 CSS 技巧 它可以显示完全不同的内容 section class sidebar nested h2 Nested S
  • 如何在opencv中从图片中检测文档?

    我正在尝试设计一个类似于 camscanner 的应用程序 为此 我必须拍摄一张图像 然后在其中找到文档 我从这里描述的代码开始 http opencvpython blogspot in 2012 06 sudoku solver par
  • 具有自定义变量索引的 Javascript 数组

    是否可以使用变量设置数组的自定义索引 例如 var indexID 5 var temp indexID new Array 上面的示例将数组索引设置为indexID并不是5 我尝试过使用 snd 报价但我没有任何成功 Thnaks 是的
  • CMake 删除“诊断中源代码文件的完整路径”选项 /FC

    如何指示 CMakeLists txt 中的 CMake 创建不包含 FP 的 Visual Studio 项目option https msdn microsoft com en us library 027c4t2s aspx Than
  • Groovy 类没有被收集,但没有内存泄漏的迹象

    我有一个 Java 类 它使用自定义类加载器动态重新加载 groovy 类 并且我看到一些奇怪的行为 某些类没有被收集 但随着时间的推移 它不会泄漏内存 例如 perm gen 不会无限期地继续增长 在我的java代码中 我正在加载这样的类
  • 设计线程安全类

    当阅读 MSDN 文档时 它总是会让您知道一个类是否是线程安全的 我的问题是如何设计一个线程安全的类 我不是在谈论用锁定调用类 我的意思是我正在为 Microsoft 创建 XXX 类 对象工作 我想说它是 线程安全 我需要做什么 使类线程
  • 为什么 JAXB 不为列表生成 setter

    当我从 XSD 生成 JAXB 类时 带有的元素maxOccurs unbounded 获取为它们生成的getter方法 但没有setter方法 如下 Gets the value of the element3 property p Th
  • 是否可以完全避免堆碎片?

    例如 如果动态内存的释放总是以与分配相反的方向完成 那么 是否能保证堆不会碎片化呢 从理论的角度来看 对于一个重要的应用程序来说 是否存在一些现实的方法来管理内存以完全避免堆碎片 堆中每次原子更改后 堆是否仍然没有碎片 对于重要的应用程序来
  • 为什么spring webflux默认选择jetty然后失败?

    我正在尝试运行基于 Spring boot 2 0 0 M7 的应用程序 以下是我的 build gradle 中与 spring 相关的依赖项 compile org springframework boot spring boot st
  • 拥有一个整数矩阵 MxN 如何将它们分组为具有增强几何形状的多边形?

    我们有一个给定整数的矩阵 从 1 到 INT MAX 的任何一个 例如 1 2 3 1 3 3 1 3 3 100 2 1 我们希望为矩阵中的每个唯一整数创建具有相同颜色的多边形 因此我们的多边形将具有如下所示的坐标 分组 我们可以生成这样
  • Spring HATEOAS 资源汇编器和具有许多变量的资源链接

    我正在使用 Spring HATEOAS 和 Spring 堆栈开发 REST API 但我在资源链接方面遇到了一些问题 这是我的代码 控制器 RestController RequestMapping apporteurs idInt r
  • 将多个表行合并到主表中

    大家星期一快乐 有问题希望你能帮忙 我有一个带有预算选项卡的预算电子表格 此选项卡上大约有 8 个表格 分为不同的类别 选项卡中的每个表都有完全相同的列 是否有非 vbscript marco 方法来创建主表 将所有表组合成不同选项卡中的单
  • AngularJS - 在正确的范围内评估指令的选项

    这里是有角度的新手 试图让我的头脑集中在指令 范围 嵌入等等方面 这就是我想要实现的目标 单元格中的每个表格都需要根据单元格内的值进行颜色编码 更改 bgcolor 或添加特定的 CSS 类 复杂的是 该单元格不具有裸值 它还有其他位和小玩
  • Eclipse CDT 调试控制台不显示程序输出

    我在用面向 C C 开发人员的 Eclipse IDE Eclipse Ganymede 包 版本 3 4 2 http www eclipse org downloads packages eclipse ide cc developer
  • ASP.NET - 如何向服务器发出 AJAX 请求而不得到我拥有的所有更新面板信息的响应?

    例如 我的页面上有三个 UpdatePanel 我单击一个按钮 然后得到很长的响应 其中包含三个 UpdatePanel 的所有数据 即视图状态字符串 我想优化我的查询并接收诸如 ok 或 not ok 之类的响应 我怎样才能做到这一点 简
  • 关于在序列中的 xsi:type 上使用 xs:unique

    元素的类型可以有唯一的约束吗 假设我有一艘诺亚方舟 其中 Animal name 必须是唯一的 下面是一个未根据架构进行验证的 XML
  • Google Apps 脚本复制文件

    我只是想复制一个打开的工作表文件 我尝试了很多变化但没有成功 下面是一个例子 会重视任何帮助 谢谢 function copyDocs var file DriveApp getFilesByName My Income Statement
  • Azure 表存储警告 - WCF 数据服务已过时

    升级到新的存储 API 版本 4 2 后 我收到以下警告 提示我在某些分段查询上调用过时的方法 Microsoft WindowsAzure Storage Table CloudTableClient GetTableServiceCon
  • Google App Engine 中的 Django 自定义模板标签

    我试图在 Google App Engine Web 应用程序中包含以下标签 http www djangosnippets org snippets 1357 http www djangosnippets org snippets 13
  • MongoError:拓扑已关闭,尽管已建立数据库连接,仍请连接

    我正在编写一个 Web 应用程序 它使用异步数据库请求作为 api 的一部分 目前 我有一个异步快速路由 等待异步函数返回函数 这两个函数都返回布尔值并且都查询数据库 第一个可以正常工作 但第二个却不能 这是 MongoClient 设置