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
发布于 2018-11-26 16:33:46
尝试这样做:
mongoose.connect('mongodb://username:password@host:port/database?options...');
var connectionString = 'mongodb://admin:MongoDB1995@200.100.200.100:database_port_here/database';
mongoose.connect(connectionString,{ useNewUrlParser: true });
阅读更多here。
发布于 2019-12-13 11:13:51
从connection string documentation of MongoDB
如果用户名或密码包含at符号@、冒号:、斜杠/或百分号%字符use percent encoding,则为
您可以通过encodeURIComponent
在JavaScript中进行百分比编码。无论您的Mongo用户名、密码或数据库是否具有上述特殊字符,以及其中MONGO_USERNAME、MONGO_PASSWORD、主机、端口和数据库都是您在环境变量或配置文件中定义的最可能的变量,下面的方法都将起作用。
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指南,它主要说明它可以帮助你的应用程序更容易地在多种不同的环境中运行,比如开发、测试和生产。此外,保持你的环境与代码分离有助于“不损害任何凭证”,以防源代码被泄露。我强烈推荐整个指南,它对应用程序的可移植性有很好的建议。
https://stackoverflow.com/questions/53476631
复制相似问题