mongodb Mongo连接从Mongoose失败,但从shell工作

nfeuvbwi  于 2023-01-01  发布在  Go
关注(0)|答案(3)|浏览(180)

我正在尝试使用Mongoose从我的Node应用程序连接到Mongo应用程序。我以前在同一台机器上做过这个操作,但这次我遇到了连接问题。

import { connect } from 'mongoose';

export class ConnectedModel {
   
  protected async connect(): Promise<void>() {
     const connectionString = 'mongodb://my-user-name:my-password@localhost/my-database';
     await connect(connectionString);
  }
}

这会抛出一个错误:

/my-project/node_modules/mongoose/lib/connection.js:807
 const serverSelectionError = new ServerSelectionError();
                                ^ MongooseServerSelectionError: connect ECONNREFUSED ::1:27017
     at NativeConnection.Connection.openUri (/my-project/node_modules/mongoose/lib/connection.js:807:32)
     // many lines of error stack
     at UserModel.connect (/my-project/bin/www/models/connected.model.js:6:38)

我想这个问题一定与我的凭据有关 * 但是 * 如果我从命令行使用mongo "mongodb://my-user-name:my-password@localhost/my-database",它会以正确数据库中的正确用户身份打开shell。
用户属于我尝试使用的数据库,所以我不认为这是authSource问题,更改authSource没有任何效果,所以on this previous question的解决方案都不适合我。
为什么这个连接字符串可以从命令行而不能通过Mongoose工作?我需要做什么修改才能打开这个连接?

acruukt9

acruukt91#

您将收到ECONNREFUSED错误,这基本上意味着您试图使用的端口正在使用中。
但是如果我在命令行中使用mongo“mongodb://my-user-name:my-password@localhost/my-database”,它会以正确数据库中正确用户的身份打开shell。
1.你关闭连接了吗?
1.您可以尝试更改默认端口号并尝试重新连接。
在此处查找信息-标准连接字符串格式
TL;DR -类似于mongodb://[username:password@]host1[:port1][,...hostN[:portN]][/[defaultauthdb][?options]]
1.如果正在使用PORT,则检查CMD(在Windows中)
以admin身份运行CMD,然后运行netstat -an并查找端口27017

nr9pn0ug

nr9pn0ug2#

有点奇怪,但是从this Mongoose issue来看,当Mongo不在IPV6模式下运行时,它似乎在尝试使用IPV6解析localhost时出现了问题。将ConnectionString更改为mongodb://my-user-name:my-password@127.0.0.1/my-database解决了连接故障。
这个问题建议检查/etc/hosts以确保127.0.0.1::1之前,但在我的系统上已经是这样了,所以这可能与Mac上的环境有关。

yc0p9oo0

yc0p9oo03#

也许你得到连接ECONNREFUSED错误是因为你忘了启动MongoDB服务器.在确认你安装了MongoDB之后,在你的终端上打开一个新的标签并运行命令:

mongod

读取:https://www.freecodecamp.org/news/learn-mongodb-a4ce205e7739/
Ref: https://www.mongodb.com/docs/manual/reference/program/mongod/#options

相关问题