来自Node.JS的授权无法使用MongoDB Atlas

我试图连接到我的mongoDB地图集群,但得到authentication失败。 我能够从像Studio 3T和Mongo shell这样的客户端进行连接。

这是我的连接URI:

var conn = mongoose.connect("mongodb://<user>:<password>@xxx-shard-00-00-kqmqb.mongodb.net:27017,xxx-shard-00-01-kqmqb.mongodb.net:27017,xxx-shard-00-02-kqmqb.mongodb.net:27017/myDB?ssl=true&replicaSet=xxxCluster-shard-0&authSource=admin") 

我从atlas控制台复制这个。 我正在使用Mongoose 4.9.7,它使用MongoDB 2.2.26,所以我使用这些模块的最新版本。

我得到的错误如下:

 MongoError: authentication fail 

任何想法这可能是什么?

find解决scheme。 我的密码有特殊字符,所以我必须妥善编码。 改变了执行

 var f = require('util').format; var user = encodeURIComponent('user'); var password = encodeURIComponent('p@ssw0rdWithSpecialCharacter'); var url = f("mongodb://%s:%s@xxx-shard-00-00-kqmqb.mongodb.net:27017,xxx-shard-00-01-kqmqb.mongodb.net:27017,xxx-shard-00-02-kqmqb.mongodb.net:27017/myDB?ssl=true&replicaSet=xxx-shard-0&authSource=admin",user,password); var conn = mongoose.connect(url);