首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >当密码中有@时,如何使用mongoose连接MongoDB?

当密码中有@时,如何使用mongoose连接MongoDB?
EN

Stack Overflow用户
提问于 2018-11-26 15:45:09
回答 2查看 251关注 0票数 1

mongoose.connect('mongodb://admin:admin@MongoDB1995@200.100.200.100/database', { useNewUrlParser: true })

这是mongoose用来从目标数据库中解析用户名和密码的字符串。这里有一个问题,密码本身包含'@‘,因此mongoose会错误地解析它。那么,如果密码中有@,我如何将密码传递给mongoose呢?

我可以使用mongodb://200.100.200.100/database?user= admin:admin&pass=admin@MongoDB1995来连接数据库,但是一旦连接上,如果我在它上面运行任何命令,它就会发出这个拒绝:

UnhandledPromiseRejectionWarning: MongoError: command insert requires authentication

EN

回答 2

Stack Overflow用户

发布于 2018-11-26 16:33:46

尝试这样做:

mongoose.connect('mongodb://username:password@host:port/database?options...');

代码语言:javascript
运行
复制
var connectionString = 'mongodb://admin:MongoDB1995@200.100.200.100:database_port_here/database';

mongoose.connect(connectionString,{ useNewUrlParser: true });

阅读更多here

票数 0
EN

Stack Overflow用户

发布于 2019-12-13 11:13:51

connection string documentation of MongoDB

如果用户名或密码包含at符号@、冒号:、斜杠/或百分号%字符use percent encoding,则为

您可以通过encodeURIComponent在JavaScript中进行百分比编码。无论您的Mongo用户名、密码或数据库是否具有上述特殊字符,以及其中MONGO_USERNAME、MONGO_PASSWORD、主机、端口和数据库都是您在环境变量或配置文件中定义的最可能的变量,下面的方法都将起作用。

代码语言:javascript
运行
复制
const connectionString = `mongodb://${encodeURIComponent(MONGO_USERNAME)}:${encodeURIComponent(MONGO_PASSWORD)}@${HOST}:${PORT}/${encodeURIComponent(DATABASE)}`;

mongoose.connect(connectionString,{ useNewUrlParser: true });

附注:`string content ${variable} string content`,反标记符号,是ES2015 template strings,根据Kangax's compatibility table,至少可以从Node.js版本的4+中使用。

出于某些原因,你可能想要把你的配置放在环境变量中,参见Config the 3rd factor of the 12 Factor App指南,它主要说明它可以帮助你的应用程序更容易地在多种不同的环境中运行,比如开发、测试和生产。此外,保持你的环境与代码分离有助于“不损害任何凭证”,以防源代码被泄露。我强烈推荐整个指南,它对应用程序的可移植性有很好的建议。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53476631

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档