因此,當我第一次打開與數據庫的連接時,所有工作都正常,但是當我關閉它並嘗試重新打開它時,db對象沒有給出錯誤,但返回undefined ...MongoDB&React:db.find()在關閉它後返回undefined
以下是我打開的連接:
let conn = null;
let db = null;
async function validateLoginForm(payload, res) {
const errors = {};
let isFormValid = true;
let message = '';
if (!payload || typeof payload.email !== 'string' || payload.email.trim().length === 0) {
if (payload.email !== 'anonymous') {
isFormValid = false;
errors.email = 'Please provide your email address.';
}
}
if (!payload || typeof payload.password !== 'string' || payload.password.trim().length === 0) {
if (payload.email !== 'anonymous') {
isFormValid = false;
errors.password = 'Please provide your password.';
}
}
let stringConnection = payload.email === 'anonymous' ? 'mongodb://ds133221.mlab.com:33221/sandbox-te' : 'mongodb://' + payload.email + ':' +
payload.password + '@ds133221.mlab.com:33221/sandbox-te';
conn = await MongoClient.connect(stringConnection, await function(err, dbase) {
if (err)
{
isFormValid = false;
let errorMessage = 'Error connecting to DB';
return res.status(400).json({
success: false,
message: errorMessage,
errors: errors
});
}
else
{
db = dbase;
if (payload.email !== 'anonymous')
{
let roles = dbase.command({usersInfo: {user: payload.email, db: 'sandbox-te'}, showCredentials: true}, (err, result) => {
if (result.users[0] && result.users[0].roles[0] &&
(result.users[0].roles[0].role === 'dbOwner' || result.users[0].roles[0].role === 'readWrite'))
{
dbase.close();
return res.status(200).json({
success: true,
hasWriteRole: true
})
}
});
}
else
{
return res.status(200).json({
success: true,
hasWriteRole: false
})
}
}
});
}
文件的第一部分驗證登錄窗體和第二部分使用的電子郵件和密碼來嘗試打開與數據庫的連接。
全功能只是工作正常,但是當我嘗試重新打開在同一個文件,但其他功能它,它不會工作:
router.post('/search', (req, res) => {
db.open((err, dbase) => {
let test = dbase.collection('test');
console.log(test);
let promiseOfFind = test.find({}).toArray((err, docs) => {
console.log(docs); // RETURNS UNDEFINED ONLY IF DB WAS CLOSED EARLIER
})
});
});
如果我不關閉數據庫validateLoginForm函數,我可以檢索文檔而無需再次打開它,但我只是想實現此目的。
我的代碼有什麼問題?我很新的Javascript和官方的MongoDB驅動程序的API參考node.js沒有多大幫助..
我正在使用最新版本的React,Express,MongoDB官方驅動Node.JS,當然,Node.JS
在此先感謝!
因爲你的「左側」的說法提出了「無極」。下決心如果你想要一個「承諾」或「回調」。 –
另外,我不知道你在讀什麼,但是'db.open()'看起來像你試圖訪問一個不贊成使用的方法。連接應始終打開。 –
閱讀:http://mongodb.github.io/node-mongodb-native/2.2/api/Db.html#open這是2.2驅動程序的官方文檔。我使用的是2.2.29。另外,你的第一條評論並沒有解決這個問題。 –