gpt4 book ai didi

javascript - MongoDB 和 React : db. find() 关闭后返回未定义

转载 作者:行者123 更新时间:2023-12-03 03:50:30 25 4
gpt4 key购买 nike

因此,当我第一次打开与数据库的连接时,一切工作正常,但是当我关闭它并尝试重新打开它时,数据库对象没有给出错误,但返回未定义...

这是我打开连接的方法:

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 还很陌生,node.js 的官方 MongoDB 驱动程序的 API 引用没有多大帮助..

我正在使用最新版本的 React、Express、Node.JS 的 MongoDB 官方驱动程序,当然还有 Node.JS

提前致谢!

最佳答案

对于 MongoDB,您应该打开一个连接并通过您的应用程序重复使用它。您不需要那时的 promise 。

启动时:

const connection = MongoClient.connect(stringConnection, function(err, dbase) {
// Start web server
});

关于javascript - MongoDB 和 React : db. find() 关闭后返回未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45186527/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com