Проблема с кодом заключается в том, что он не ждет, пока readDB()
завершит выполнение своих задач с Mongodb, и вернется с пустым, поскольку resultdb
только что определено.
Но когда вы вызываете его один раз, после того, как запрос будет обработан, readDB()
получит данные от Mongodb, и он будет установлен на resultdb
. В следующий раз, когда вы вызываете API, вы получите результат, обработанный в предыдущем вызове API, а не новый.
Попробуйте это -
app.get('/showdb', async function(req, res) {
const result = await readDB(); // here we are waiting for the results to finish using await.
res.send(result);
});
и ваша функция readDB работает как -
async function readDB() { // making using of async here.
MongoClient.connect(url, function(err, db) {
if (err) throw err;
const dbo = db.db('simpledb');
dbo.collection('simplecollection').find().toArray(function(err, result) {
if (err) throw err;
resultdb = result;
return resultdb; // we can now return it.
db.close();
});
});
};
Примечание. Учитывая, что вы используете обновленную версию Node с поддержкой async - await
--- ОБНОВЛЕНИЕ ----
Вы можете попробовать это -
app.get('/showdb', async function(req, res) {
readDB(req, res);
});
function readDB(req, res) { // making using of async here.
MongoClient.connect(url, function(err, db) {
if (err){
res.send(err);
throw err;
}
const dbo = db.db('simpledb');
dbo.collection('simplecollection').find().toArray(function(err, result) {
if (err){
res.send(err);
throw err;
}
res.send(result)
db.close();
});
});
};