检查猫鼬连接状态而不创建新连接

     2023-03-10     228

关键词:

【中文标题】检查猫鼬连接状态而不创建新连接【英文标题】:Check mongoose connection state without creating new connection 【发布时间】:2013-11-05 03:27:57 【问题描述】:

我有一些测试 - 即 Supertest - 加载我的 Express 应用程序。这个应用程序创建了一个 Mongoose 连接。我想知道如何从我的测试中检查该连接的状态。

在 app.js 中

mongoose.connect(...)

在 test.js 中

console.log(mongoose.connection.readyState);

如何访问 app.js 连接?如果我在 test.js 中使用相同的参数进行连接,会创建一个新连接还是查找现有连接?

【问题讨论】:

两个脚本是相互独立运行还是app.js需要test.js? @Bernhard test.js 需要 app.js - 在 app.js 我做 var app = exports.app = express() 并且在测试我做 require('../app.js' ).app 【参考方案1】:

由于 mongoose 模块导出一个单例对象,因此您不必在 test.js 中进行连接来检查连接状态:

// test.js
require('./app.js'); // which executes 'mongoose.connect()'

var mongoose = require('mongoose');
console.log(mongoose.connection.readyState);

就绪状态:

0:断开连接 1:已连接 2:连接 3:断开连接

【讨论】:

输出 - 0 = 断开连接,1 = 连接,2 = 连接,3 = 断开连接 (soucre) 我的凭据无效,它给出了 4,我在官方文档或其他任何地方都找不到. @AshwaniAgarwal 查看this file。 如果 MongoDB 停止/崩溃,状态仍然保持不变。在我的情况下,如果连接时为 1,并且如果 mongo 停止,它仍在打印 1。 @RaviKumarGupta 可能需要(相当)一段时间才能让 Mongoose 知道连接已断开。 @robertklep,我是这么认为的。在 mongo 关闭后,我尝试打印就绪状态。即使在 5 分钟后,我仍然可以看到 readyState 值为 1.. :(【参考方案2】:

我将它用于我的 Express Server mongoDB 状态,我使用 express-healthcheck 中间件

// Define server status
const mongoose = require('mongoose');
const serverStatus = () => 
  return  
     state: 'up', 
     dbState: mongoose.STATES[mongoose.connection.readyState] 
  
;
//  Plug into middleware.
api.use('/api/uptime', require('express-healthcheck')(
  healthy: serverStatus
));

在连接数据库时在 Postman 请求中提供此信息。


  "state": "up",
  "dbState": "connected"

当数据库关闭时给出这个响应。


"state": "up",
"dbState": "disconnected"

(响应中的“up”代表我的 Express Server 状态)

易于阅读(无需解释数字)

【讨论】:

【参考方案3】:

如前所述,“readyState”很好。 “ping”也是很好的管理工具。如果它可以接受命令,它将返回 ok: 1 。

const mongoose = require('mongoose')

// From where ever your making your connection
const connection = await mongoose.createConnection(
    CONNECT_URI,
    CONNECT_OPTS
)

async function connectionIsUp(): Promise<boolean> 
    try 
        const adminUtil = connection.db.admin()

        const result = await adminUtil.ping()

        console.log('result: ', result) //  ok: 1 
        return !!result?.ok === 1
     catch(err) 
        return false
        
 

或者如果你想要它简短。

async function connectionIsUp(): Promise<boolean> 
    try 
        return await connection.db.admin().ping().then(res => !!res?.ok === 1)
     catch (err) 
        return false
    

【讨论】:

!!result?.ok === 1 的语法是什么?您能否提供该语法的文档链接? readyState 文档:mongoosejs.com/docs/api.html#connection_Connection-readyState【参考方案4】:
var dbState = [
    value: 0,
    label: "disconnected"
,

    value: 1,
    label: "connected"
,

    value: 2,
    label: "connecting"
,

    value: 3,
    label: "disconnecting"
];

mongoose.connect(CONNECTIONSTRING, 
    useNewUrlParser: true
,
() => 
    const state = Number(mongoose.connection.readyState);
    console.log(dbState.find(f => f.value == state).label, "to db"); // connected to db
);

【讨论】:

如何在 PL/SQL 中连接两个表而不创建新表

】如何在PL/SQL中连接两个表而不创建新表【英文标题】:HowtojointwotablesinPL/SQLwithoutcreatinganewone【发布时间】:2019-10-1111:37:20【问题描述】:我正在尝试在PL/SQL中加入两个表,但我不想创建另一个表。我想使用“ALTERTABLE”。我想... 查看详情

安卓;检查文件是不是存在而不创建新文件

】安卓;检查文件是不是存在而不创建新文件【英文标题】:Android;Checkiffileexistswithoutcreatinganewone安卓;检查文件是否存在而不创建新文件【发布时间】:2013-04-2017:12:33【问题描述】:我想检查我的包文件夹中是否存在文件,但我... 查看详情

猫鼬连接抛出 MongooseServerSelectionError

...mongodbAtlas,但它不断抛出MongooseServerSelectionError,我已经检查了数据库用户的用户名和密码,并 查看详情

如何填充新创建的猫鼬文档?

...】:2020-05-1413:01:30【问题描述】:我有一个案例,我正在检查一个文档是否已经存在,如果它不存在,我正在创建一个新文档。我需要在文档中填充2个字段。我的问题是.create方法不支持.populate方法,因为如果我尝试这样做会出... 查看详情

使用 AFNetworking 检查 Internet 连接状态

】使用AFNetworking检查Internet连接状态【英文标题】:CheckInternetconnectionstateusingAFNetworking【发布时间】:2016-10-2608:42:34【问题描述】:我想创建一个通用类来检查互联网连接,它也应该在互联网改变状态时通知我。我正在使用AFNetwo... 查看详情

为啥当我尝试检查套接字连接状态时应用程序崩溃?

】为啥当我尝试检查套接字连接状态时应用程序崩溃?【英文标题】:WhyAppceasheswhenItrytochecksocketconnectionstatus?为什么当我尝试检查套接字连接状态时应用程序崩溃?【发布时间】:2014-12-0907:00:12【问题描述】:我正在构建远程PC... 查看详情

Azure 存储帐户:Blob 服务 (SAS) 连接检查失败

】Azure存储帐户:Blob服务(SAS)连接检查失败【英文标题】:AzureStorageAccount:Blobservice(SAS)ConnectivityCheckFAILED【发布时间】:2020-10-1903:50:27【问题描述】:我们在Azure上创建了一个新的存储帐户。而且,当我们执行连接检查时,它显示... 查看详情

远程检查 IP 端口状态

】远程检查IP端口状态【英文标题】:CheckingIPPortStateRemotely【发布时间】:2010-09-1214:01:02【问题描述】:我发现一篇关于在机器上获取活动tcp/udp连接的文章。http://www.codeproject.com/KB/IP/iphlpapi.aspx但我的问题是我需要能够远程确定... 查看详情

dbcp连接池介绍

# 初始化连接:连接池启动时创建的初始化连接数量initialSize=1# 最小空闲连接:连接池中容许保持空闲状态的最小连接数量,低于这个数量将创建新的连接,如果设置为0则不创建minIdle=1# 最大空闲连接:连接池中容许保持空... 查看详情

dbcp连接池介绍

# 初始化连接:连接池启动时创建的初始化连接数量initialSize=1# 最小空闲连接:连接池中容许保持空闲状态的最小连接数量,低于这个数量将创建新的连接,如果设置为0则不创建minIdle=1# 最大空闲连接:连接池中容许保持空... 查看详情

使用连接池后返回连接时如何检查连接是不是处于活动状态?

】使用连接池后返回连接时如何检查连接是不是处于活动状态?【英文标题】:Howtocheckconnectionisliveornotwhilereturningconnectionafterusingitconnectionpool?使用连接池后返回连接时如何检查连接是否处于活动状态?【发布时间】:2017-02-2406:2... 查看详情

如何记录 Tomcat 7 JDBC 连接池、连接创建

】如何记录Tomcat7JDBC连接池、连接创建【英文标题】:HowtologTomcat7JDBCconnectionpool,connectioncreation【发布时间】:2014-11-1302:17:30【问题描述】:尽管我们使用的是Tomcat7JDBC连接池,但我正在尝试调试似乎打开和关闭的数据库连接数量... 查看详情

猫鼬多个连接

】猫鼬多个连接【英文标题】:Mongoosemultipleconnections【发布时间】:2015-12-3014:56:30【问题描述】:目前我有此代码用于我的连接mongoose.js:varmongoose=require(\'mongoose\');varuriUtil=require(\'mongodb-uri\');varmongodbUri=\'mongodb://localhost/db_name\';va... 查看详情

猫鼬多个连接

】猫鼬多个连接【英文标题】:Mongoosemultipleconnections【发布时间】:2015-12-3014:56:30【问题描述】:目前我有此代码用于我的连接mongoose.js:varmongoose=require(\'mongoose\');varuriUtil=require(\'mongodb-uri\');varmongodbUri=\'mongodb://localhost/db_name\';va... 查看详情

如何检查是不是使用了连接池

】如何检查是不是使用了连接池【英文标题】:Howtocheckifconnectionpoolisused如何检查是否使用了连接池【发布时间】:2017-04-0412:52:57【问题描述】:我在OSGI框架(Felix)上使用HSQLDB+EclipseLink+Gemini。尽管我在persistence.xml中设置了池,但... 查看详情

java示例代码_使用jdbc连接检查java中的连接状态

java示例代码_使用jdbc连接检查java中的连接状态 查看详情

在哪里进行猫鼬连接/任何数据库连接

】在哪里进行猫鼬连接/任何数据库连接【英文标题】:Wheretomakemongooseconnection/anydatabaseconnection【发布时间】:2018-03-1408:10:37【问题描述】:我已经阅读了几个关于mongoose.connect()和mongoose.createConnection()的***文档和mongoose文档,但是... 查看详情

带有打字稿的猫鼬,来自猫鼬的错误“连接”

】带有打字稿的猫鼬,来自猫鼬的错误“连接”【英文标题】:Mongoosewithtypescript,error\'connect\'frommongoose【发布时间】:2020-06-2112:09:20【问题描述】:当我启动服务器时,出现这个错误:this.mongo.connect(\'mongodb://localhost:27017/tsnode\',^... 查看详情