Javascript 无法连接到Azure中的MongoDB
我在Azure上有一个MongoDB,我正在尝试使用npm模块连接到它: 密码 我的密码具有以下特征:Javascript 无法连接到Azure中的MongoDB,javascript,node.js,mongodb,azure,Javascript,Node.js,Mongodb,Azure,我在Azure上有一个MongoDB,我正在尝试使用npm模块连接到它: 密码 我的密码具有以下特征: 包含字母、小写、大写 没有空白 包含数字 包含特殊字符,如=、@、$等 错误 在执行上述代码时,我得到以下信息: Error: Password contains an illegal unescaped character at parseConnectionString (C:\Users\myuser\Documents\myproj\node_modules\mongodb
- 包含字母、小写、大写
- 没有空白
- 包含数字
- 包含特殊字符,如
、=
、@
等$
Error: Password contains an illegal unescaped character
at parseConnectionString (C:\Users\myuser\Documents\myproj\node_modules\mongodb\lib\url_parser.js:280:13)
然而,文档并没有说明如何解决这个问题。我想这是一个编码问题。如何解决这个问题?像@这样的字符会受到限制,因为它们会扰乱URL的结构。 原因是MongoDB将其解释为@separator。与此相反:
var mongoClient = require("mongodb").MongoClient;
mongoClient.connect("mongodb://myuser:myp@ssword@myhost.documents.azure.com:10355/?ssl=true", function (err, db) {
db.close();
});
用这个
mongoClient.connect("mongodb://myuser:myp%40ssword@myhost.documents.azure.com:10355/?ssl=true", {
uri_decode_auth: true
}, function (err, db) {
db.close();
});
要对密码进行编码,请使用encodeURIComponent(密码)
您也可以使用此语法
mongoClient.connect("mongodb://myhost.documents.azure.com:10355/?ssl=true",
{user: 'username', pass: 'p@ssword'}, function (err, db) {
db.close();
});
在更高版本上,使用
auth: {
user: 'username',
password: 'p@ssword',
}
如下
mongoClient.connect("mongodb://myhost.documents.azure.com:10355/?ssl=true", {
auth: {
user: 'username',
password: 'p@ssword',
}}, function (err, db) {
db.close();
});
接受的答案在mongodb>3.0.x上对我不适用 这段代码对我有用:
const mongoClient = require("mongodb").MongoClient;
let database = null;
new mongoClient('mongodb://myhost.documents.azure.com:10355/?ssl=true', {
auth: {
user: 'username',
password: 'p@ssword',
}
}).connect(
(err, db) => {
if (err) return console.error(err);
console.log('Database connected');
database = db.db('foo');
});
实际上,mongoDB和数据库有一个单独的用户名。它们也有不同的密码。因此,请确保您有mongoDB现在可以使用带有特殊字符的密码。为此,向连接添加一个选项
{useNewUrlParser:true}
:
const MongoClient = require('mongodb').MongoClient;
const assert = require('assert');
const uri = 'mongodb://mydbname:pa$s;w@rd@mongodb0.example.com:27017/admin';
MongoClient.connect(uri, { useNewUrlParser: true }, (err, db) => {
assert.strictEqual(null, err);
// ...
db.close();
});
谢谢我看到了这种结构,但在使用另一个库连接到mongo的帖子中,我认为
mongodb
API不支持它!感谢BunCheDIT:我编辑了后测试,结果发现语法是错误的:(请考虑把你的答案放在以前的语法上。它确实对我起作用。你为什么要删除它?当然,会这样做的。不要使用包MangoDB版本。3.0.0。请看我的答案。
const MongoClient = require('mongodb').MongoClient;
const assert = require('assert');
const uri = 'mongodb://mydbname:pa$s;w@rd@mongodb0.example.com:27017/admin';
MongoClient.connect(uri, { useNewUrlParser: true }, (err, db) => {
assert.strictEqual(null, err);
// ...
db.close();
});