I created an app, what I want to achieve is when the app runs, get the uid from the table user and insert it into a new table msg, code like following.
conn.js
'use strict'
const { MongoClient } = require('mongodb');
const client = new MongoClient(dbUrl, { useNewUrlParser: true });
client.connect(function (err) {
if (err) {
console.log(err);
} else {
console.log('mongodb connected');
}
});
const db = client.db(dbName);
module.exports = db;
app.js
'use strict';
const db = require('./conn');
try {
let to = "nick";
let from = "susan";
let content = "test";
let userinfo = db.collection("user").findOne({name: to});
let uid = userinfo.uid;
console.log(uid)
db.collection("msg").insertOne({from: from, to: to})
} catch(e) {
console.log(e)
}
But it runs, the displayed order of the printed log is
undefined
mongodb connected
uid is undefined, because database isn't connected yet, how to fix this? Thank you.
CodePudding user response:
You need to make sure your db queries are async in nature.
If you are using async/await, you can do
let userinfo = await db.collection("user").findOne({name: to});
let uid = userinfo.uid;
console.log(uid);
await db.collection("msg").insertOne({from: from, to: to});
You can also use then/catch as well
db.collection("user").findOne({name: to}).then(userinfo => {
let uid = userinfo.uid;
}
