したがって、データベースとの接続を最初に開くと、すべて正常に動作していますが、閉じて再オープンしようとすると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の新機能であり、node.jsの公式MongoDBドライバのAPIリファレンスはあまり役に立たない。
Node.JSのReact、Express、MongoDB公式ドライバの最新バージョンを使用していますが、もちろん、Node.JS
ありがとうございます!
。あなたが "約束"または "コールバック"をしたい場合は、あなたの心を作ります。 –
また、あなたが読んでいるものは分かりませんが、廃止予定のメソッドにアクセスしようとしているように 'db.open()'があります。接続は常に開いている必要があります。 –
これを読んで:http://mongodb.github.io/node-mongodb-native/2.2/api/Db.html#open 2.2ドライバの公式文書です。私は2.2.29を使用しています。また、あなたの最初のコメントは問題を解決しませんでした。 –