2016-11-15 131 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