Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 无法连接到Azure中的MongoDB_Javascript_Node.js_Mongodb_Azure - Fatal编程技术网

Javascript 无法连接到Azure中的MongoDB

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

我在Azure上有一个MongoDB,我正在尝试使用npm模块连接到它:

密码 我的密码具有以下特征:

  • 包含字母、小写、大写
  • 没有空白
  • 包含数字
  • 包含特殊字符,如
    =
    @
    $
错误 在执行上述代码时,我得到以下信息:

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();
});