mongoose.connect('mongodb://admin:admin@MongoDB1995@200.100.200.100/database', { useNewUrlParser: true })
这是Mongoose用来解析目标数据库中的用户名和密码的字符串。这里有一个问题,密码本身包含“ @”,因此猫鼬会错误地解析它。那么,如何在密码中带有@的猫鼬中传递密码?
我可以使用mongodb://200.100.200.100/database?user= admin:admin&pass=admin@MongoDB1995
来连接数据库,但是如果我在数据库上运行了任何命令,那么一旦连接成功,它就会发出拒绝消息:
UnhandledPromiseRejectionWarning: MongoError: command insert requires authentication
答案 0 :(得分:0)
尝试这种方式:
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。
答案 1 :(得分:0)
从connection string documentation of MongoDB
如果用户名或密码包含@符号,冒号:,斜杠/或百分号%字符,则use percent encoding
您可以通过<table id="MVCGridTable_Grid" class="table table-striped table-bordered">
<thead>
<tr>
<th>aaa</th>
<th>aaa</th>
<th>aaa</th>
<th>aaa</th>
<th>aaa</th>
</tr>
</thead>
<tbody>
<tr>
<td>aaa</td>
<td>aaa</td>
<td>aaa</td>
<td>aaa</td>
<td>aaa</td>
</tr>
<tr>
<td>aaa</td>
<td>aaa</td>
<td>aaa</td>
<td>aaa</td>
<td>aaa</td>
</tr>
<tr>
<td>aaa</td>
<td>aaa</td>
<td>aaa</td>
<td>aaa</td>
<td>aaa</td>
</tr>
<tr>
<td>aaa</td>
<td>aaa</td>
<td>aaa</td>
<td>aaa</td>
<td>aaa</td>
</tr>
<tr>
<td>aaa</td>
<td>aaa</td>
<td>aaa</td>
<td>aaa</td>
<td>aaa</td>
</tr>
</tbody>
</table>
在JavaScript中进行百分比编码。无论您的Mongo用户名,密码或数据库是否具有上述特殊字符,并且其中MONGO_USERNAME,MONGO_PASSWORD,HOST,PORT和DATABASE都是您定义的变量(在环境变量或配置文件中很有可能),下面的代码都将起作用。 >
encodeURIComponent
P.S。 const connectionString = `mongodb://${encodeURIComponent(MONGO_USERNAME)}:${encodeURIComponent(MONGO_PASSWORD)}@${HOST}:${PORT}/${encodeURIComponent(DATABASE)}`;
mongoose.connect(connectionString,{ useNewUrlParser: true });
(反引号)为ES2015 template strings,至少可用于Node.js 4+版本
根据{{3}}。
出于某些原因,您可能希望将配置放入环境变量中,请参阅Kangax's compatibility table指南,该指南主要指出,它有助于使您的应用更轻松地在多个不同的环境中运行,例如开发,测试和生产。如果源泄漏,将环境与代码分开还有助于“(不损害任何凭据)”。我强烈推荐整个指南,它对应用程序的可移植性有很好的建议。