На моем app.get в моем server.js я возвращаю набор данных из mongo db, а затем передаю свою страницу при передаче данных на нее.res.render ТОЛЬКО после завершения нескольких запросов данных
, как показано ниже:
//page load
app.get('/', (req, res) => {
//find all data in test table
var articles;
db.collection('test').find().toArray((err, result) => {
if (err) return console.log(err)
articles = result
// renders index.ejs and passes result to quotes
res.render('./pages/index.ejs', {
quotes: articles
})
})
})
Я хочу, чтобы иметь возможность поставить несколько БД запросы, а затем передать несколько переменных данных на мой визуализации, моя проблема в том, что, когда я кладу res.render вне запроса db, он пытается отобразить до того, как db получит свой набор данных.
посмотреть, что я пытался ниже:
//page load
app.get('/', (req, res) => {
//find all data in test table
var articles;
db.collection('test').find().toArray((err, result) => {
if (err) return console.log(err)
articles = result
})
// renders index.ejs and passes result to quotes
res.render('./pages/index.ejs', {
quotes: articles
})
})
мой вопрос:
Как я мог убедиться, что рендер происходит ТОЛЬКО после моих БД запросов закончились и возвратил данные в переменную?
В конце концов, я хотел бы быть в состоянии сделать что-то вроде этого:
//page load
app.get('/', (req, res) => {
//find all data in table 1
var AAA;
db.collection('test1').find().toArray((err, result) => {
if (err) return console.log(err)
AAA = result
})
//find all data in table 2
var BBB;
db.collection('test2').find().toArray((err, result) => {
if (err) return console.log(err)
BBB = result
})
//find all data in table 3
var CCC;
db.collection('test3').find().toArray((err, result) => {
if (err) return console.log(err)
CCC = result
})
// renders index.ejs and passes result to quotes
res.render('./pages/index.ejs', {
quotes: AAA,
quotes2: BBB,
quotes3: CCC
})
})
Любая помощь или совет по этому вопросу ценится. Заранее спасибо.
Если вы используете собственный клиент mongodb, то не проходите обратные вызовы, поэтому он возвращает обещание, а затем просто используйте 'then', выполняйте запрос, присваивайте результат внешней переменной, затем другой' then', выполняете запрос и т. д. – jstice4all
первый запрос был бы идеальным, но я хотел бы иметь возможность делать несколько запросов, а затем передавать все результаты в рендеринг в конце, см. Edit. @ jstice4all –
Я отредактировал свой комментарий. – jstice4all