2016-11-15 130 views
0

我有一個獲取路線爲數據(標題和contries)呈現register.pug。快速路由 - 在路由內呼叫路由

// GET /register.pug 
router.get('/register', function(req, res, next) { 
    res.render('register', { 
    title: 'Register', 
    countries: [] //countries 
    }); 
}); 

我也有一個從我的數據庫中檢索contries的路徑,我可以用它來獲取上述渲染的「國家」數據嗎?

// GET /contries 
router.get("/", function(req, res){ 

    //Result from Sequelize query 
    var contries = [{ 
     name: Denmark, 
     ISO: DK 
    }, { 
     name: Sweden, 
     ISO: SE 
    }]; 

    res.status(200).send(contries); 
}); 

回答

0

據我所知,你不能直接使用這些值,因爲它是在另一個函數內。

您可以創建一箇中間件功能,從數據庫獲取的國家,並使用下一個功能事後與國家打電話給你的路線對象:

app.use(function(req, res, next) { 
    // how I imagine the sequelize call 
    Country.findAll().then(function(countries) { 
     next(countries); 
    }); 
}); 

app.get('/register', function(countries, req, res, next) { 
    res.render('register', { 
     title: 'Register', 
     countries: countries 
    }; 
}); 

app.get('/', function(countries, req, res, next) { 
    res.status(200).send(contries); 
}); 

此外,如果你要發送的國家爲JSON,在'/'路由中,您可能需要使用json函數而不是sendhttp://expressjs.com/en/api.html#res.json

+0

謝謝ikkuh :)這是你會這麼做的方式,或者你會放棄中間件功能,並在兩條路線中都有sequelize語句? – Aabling

+0

我會重複這兩個路由中的sequelize語句,我的查找調用當前都是單個後續調用。 – ikkuh

+0

這也是因爲我不知道如何在特定的路由之前輕鬆地設置中間件功能,而不是像我的例子那樣所有的路由。我仍然在學習快車。 – ikkuh