在我的server.js的app.get中,我從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在數據庫查詢之外,它試圖在數據庫獲取其數據集之前進行渲染。
看看我試過波紋管:
//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
})
})
我的問題是:
我怎麼能確保渲染恰好我的數據庫查詢已經運行後ONLY和返回數據到一個變量?
最後,我希望能夠做這樣的事情:
//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客戶端,那麼不要傳遞迴調函數,所以它返回promise,然後使用'then',執行一個查詢,將結果賦值給一個外部變量,然後再賦值一個'then',執行一個查詢等。 – jstice4all
第一個查詢將是理想的,但我希望能夠執行多個查詢,然後將所有結果傳遞到最終的渲染中,請參閱編輯。 @ jstice4all –
我編輯了我的評論。 – jstice4all