[英]Possible Unhandled Promise Rejection (id: 0): ReferenceError: error is not defined
[英]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.