mongodb 无法连接到数据库MongoParseError:在authority部分中未转义的at符号

ubof19bj  于 2022-12-12  发布在  Go
关注(0)|答案(7)|浏览(141)

我尝试连接到我的nodeJS项目中的mongodb服务器。我有一个DB配置文件DB.js

module.exports = {
    DB: 'mongodb+srv://user%40gmail.com:%24ugar@cluster-jfgsm.mongodb.net/test?retryWrites=true'
 };

用户名包含@(%40)标记,因为它是电子邮件ID,密码包含$(%24)个字符。
我在server.js文件中将其连接为

mongoose = require('mongoose'),
    config = require('./config/DB');

    const app = express();

    mongoose.Promise = global.Promise;
    mongoose.connect(config.DB,  { useNewUrlParser: true } ).then(
      () => {console.log('Database is connected') },
      err => { console.log('Can not connect to the database'+ err)}
    );

并在package.json文件中添加了自定义的serve选项来运行nodemon。

"scripts": {
    "ng": "ng",
    "start": "ng serve",
    "build": "ng build",
    "test": "ng test",
    "lint": "ng lint",
    "e2e": "ng e2e",
    "serve": "nodemon server.js"
  },

但是,当我尝试使用命令npm run serve运行项目时,我在控制台中收到一条错误消息
无法连接到数据库MongoParseError:在authority部分中未转义的at符号
我在堆栈溢出中搜索了许多问题,但没有一个对我有效。
任何帮助都是感激不尽的。谢谢

2admgd59

2admgd591#

可以对密码进行如下编码:

const DB_USER = 'user';
const PASSWORD = encodeURIComponent('hello@123'); 
const DB_URL = `mongodb://${DB_USER}:${PASSWORD}@ds331735.mlab.com:31772/any_db`;

如果密码中有@,则应将其更改为%40

yzuktlbb

yzuktlbb2#

const dbName = 'your db name';
const dbUser = 'your db username';
const dbPassword = 'your db user password';

const MONGODB_URI = `mongodb://${dbUser}:${dbPassword}@ds047207.mlab.com:47207/${dbName}`;

注意:@ds047207.mlab.com:47207它在您的帐户检查中提供了u。它没有连接,请尝试简单的用户名和密码。创建用户例:用户名:asif,密码:asif 123 Bcoz我已经创建了用户名:asif-vora和密码:asif@1234它在数据库连接中得到错误,当我尝试与用户名:asif,密码:asif 123它的工作正常:)

f3temu5u

f3temu5u3#

发现了同样的问题,但毕竟结果不是mongodb atlas帐户用户(它有电子邮件作为用户名)需要登录。
所需的用户必须能够访问在mongodb atlas中创建的集群。
Project > clusters > [Select cluster]
Security tab > select/create new db user
这些用户不需要有特殊字符(甚至有一条消息表明这些字符将被编码)
见下图:

dhxwm5r4

dhxwm5r44#

你有没有试过逃避@和$之类的

mongodb+srv://user\@gmail.com:\$ugar@cluster-jfgsm.mongodb.net/test?retryWrites=true
3ks5zfa0

3ks5zfa05#

试试这个,它对我很有效:

DB: mongodb://admin:<password>@nerdstore-shard-00-00-4iypj.mongodb.net:27017,nerdstore-shard-00-01-4iypj.mongodb.net:27017,nerdstore-shard-00-02-4iypj.mongodb.net:27017/nerdstore?ssl=true&replicaSet=nerdstore-shard-0&authSource=admin&retryWrites=true&w=majority

用你的碎片换吧。

snz8szmq

snz8szmq6#

如果您的用户名和密码包含以下任何特殊字符
/?# [ ] @
通过命令行界面连接或运行命令时可能会遇到问题:/?# [ ] @在URI中使用等效的ASCII编码。对于@,等效编码为%40

3ks5zfa0

3ks5zfa07#

非常简单解决方案:删除密码中特殊字符:
我也面临问题。我密码中有@。
解决方案:数据库访问-〉它将显示您的用户,点击编辑和更新新密码没有特殊字符。然后在您的连接字符串中使用它。

相关问题