簡體   English   中英

未處理的 promise 拒絕:錯誤:URL 格式錯誤,無法解析

[英]Unhandled promise rejection: Error: URL malformed, cannot be parsed

我同時是 aws 和 mongodb 的新手,所以我在嘗試連接到我的 mongo 數據庫時遇到了一個非常基本的問題,該數據庫托管在亞馬遜 linux ec2 實例上。 原因是,我無法構建到我的數據庫的路徑。

這是我要使用的內容:

mongoose.connect('mongod://ec2-user@ec2-XX-XX-XXX-XXX-XX.compute-1.amazonaws.com:27017/test' )

這是我的測試結果 lambda function:

UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 2): Error: URL malformed, cannot be parsed

我正在使用 mongodb 3.6.5。

Mongoose 5.x 支持以下授權語法,並確保您沒有在 url 中使用任何特殊字符,如@,-,+,>

mongoose.connect(MONGO_URL, {
  auth: {
    user: MONGO_DB_USER,
    password: MONGO_DB_PASSWORD
  }
})

或者,如果您想刪除 deprication 警告,請避免“不推薦使用當前 URL 字符串解析器”

添加選項useNewUrlParser

mongoose.connect(MONGO_URL, {
  auth: {
    user: MONGO_DB_USER,
    password: MONGO_DB_PASSWORD
  },
  { useNewUrlParser: true }
})

我的問題是一個更簡單的 URI 問題。 由於 mongod 地址中有一個@字符。

我不得不使用這個:

return mongoose.connect(encodeURI(process.env.DB_CONNECT)); //added ');'

如果您在環境文件中使用了以下 URI,例如MongoDB://<dbuser>:<dbpassword>@ds055915.mlab.com:55915/fullstack-vue-graphql請確保您在MONGOD_URI中的密碼沒有像這樣的特殊字符@ 我曾使用@作為密碼字符的一部分,但出現錯誤。 從我的DB Password刪除特殊字符后,一切都按預期工作。

在我的情況下,以下工作正常。

db.js 中

const mongoose = require('mongoose');
const MONGODB_URI = "mongodb://host-name:27017/db-name?authSource=admin";
const MONGODB_USER = "mongouser";
const MONGODB_PASS = "myasri*$atIP38:nG*#o";

const authData =  {
    "user": MONGODB_USER,
    "pass": MONGODB_PASS,
    "useNewUrlParser": true,
    "useCreateIndex": true
}; 
mongoose.connect(
    MONGODB_URI, 
    authData,
    (err) => {
        if (!err) { console.log('MongoDB connection succeeded.'); }
        else { console.log('Error in MongoDB connection : ' + JSON.stringify(err, undefined, 2)); }
    }
);

筆記:

我的節點版本是 10.x

MongoDb 服務器版本為 3.6.3

貓鼬版本是 ^5.1.2

我只想更新@anthony-winzlet 的答案,因為我有同樣的錯誤,我已經用這段代碼解決了。

mongoose.connect(url, {
  auth: {
    user:'usrkoperasi',
    password:'password'
  },
  useNewUrlParser:true
}, function(err, client) {
  if (err) {
    console.log(err);
  }
  console.log('connect!!!');
});

我只是添加回調和useNewUrlParser:true 我使用"mongoose": "^5.2.7",

快樂編碼!

如果您將應用程序部署到 Heroku,請確保更新了.env文件中的Config Vars .env 至少,這是我的情況。

我知道這個問題已經接受了答案,但這對我有用:我正在使用 Mongoose 6.0.5 和 Mongodb 5.0.6,啟用身份驗證並在密碼中使用特殊字符 (%):

mongoose.connect('mongodb://localhost:27017', {
  auth: { username: "myusername", password: "mypassword%" },
  dbName: "mydbname",
  authSource: "mydbname",
  useNewUrlParser: true,
  useUnifiedTopology: true,
}, function(err, db) {
  if (err) {
    console.log('mongoose error', err);
  }
});

許多解決方案只有 user 和 pass for auth 而需要用戶名和密碼。 它還需要 dbName 才能訪問 mydb 的 collections。

我有同樣的問題,但密碼問題不應該是特殊字符

password not use like this  Admin@%+admin.com wrong


password use like this  Admin  right

或任何您想使用的密碼

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM