javascript - 伺服器偵測與監控引擎已被棄用
我正在將 Mongoose 與我的 Node.js 應用程式一起使用,這是我的配置:
mongoose.connect(process.env.MONGO_URI, {
useNewUrlParser: true,
useUnifiedTopology: true,
useCreateIndex: true,
useFindAndModify: false
}).then(()=>{
console.log(`connection to database established`)
}).catch(err=>{
console.log(`db error ${err.message}`);
process.exit(-1)
})
但在控制台中它仍然給我警告:
DeprecationWarning:當前的伺服器發現與監控引擎已被棄用,並將在未來版本中移除。要使用新的伺服器發現與監控引擎,請將選項 { useUnifiedTopology: true } 傳遞給 MongoClient 建構函數。
出了什麼問題?我之前並沒有使用 useUnifiedTopology,但現在它會出現在控制台。我已經將它添加到配置中,但它仍然給我這個警告,為什麼?我甚至沒有使用 MongoClient。
編輯
正如 Felipe Plets 回答的,Mongoose 中存在一個問題,他們在後續版本中修復了這個錯誤。所以你可以通過更新 Mongoose 版本來解決這個問題。
答案#1
更新
Mongoose 5.7.1 已經發布,似乎修復了這個問題,所以設置 useUnifiedTopology 選項可以按預期工作。
mongoose.connect(mongoConnectionString, {useNewUrlParser: true, useUnifiedTopology: true});
原始答案
我也遇到同樣的問題,於是決定深入研究 Mongoose 代碼:https://github.com/Automattic/mongoose/search?q=useUnifiedTopology&unscoped_q=useUnifiedTopology
似乎這是在 Mongoose 5.7 版本中新增的選項,且尚未有完整的文檔。我甚至在庫的歷史記錄中都找不到它的提及 https://github.com/Automattic/mongoose/blob/master/History.md
根據程式碼中的一條註解:
- @param {Boolean} [options.useUnifiedTopology=false] 預設為 false。設置為
true以選擇使用 MongoDB 驅動程式的副本集和分片集群監控引擎。
在該項目的 GitHub 上也有關於此錯誤的問題:https://github.com/Automattic/mongoose/issues/8156
就我而言,我沒有在副本集或分片集群中使用 Mongoose,雖然這個選項應該是 false。但如果設為 false,它卻抱怨這個設定應該是 true。一旦設為 true,它仍然不起作用,可能是因為我的資料庫沒有運行在副本集或分片集群上。
我已經降級到 5.6.13,我的專案又能正常運作了。所以我現在看到的唯一選擇就是降級,然後等待修正更新到較新的版本。
答案#2
在 mongoDB 中,他們不再使用目前的伺服器和引擎監控套件,因此你需要使用新的伺服器和引擎監控套件。所以你只需使用
{ useUnifiedTopology:true }
mongoose.connect("paste db link", {useUnifiedTopology: true, useNewUrlParser: true, useCreateIndex: true });
答案#3
這解決了我的問題。
const url = 'mongodb://localhost:27017';
const client = new MongoClient(url, {useUnifiedTopology: true});
