我有几个mongodb模型,我正在通过我的路线。我正在采取的方法留下了很多重复的代码。
var AboutData = mongoose.model( 'AboutData' );
var BlogData = mongoose.model( 'BlogData' );
app.get('/about', function(req, res, next) {
BlogData.find(function(err, blogitems){
if(err) { return next(err); }
AboutData.find(function(err, items){
if(err) { return next(err); }
res.render('index.ejs',{
homelist: ['home', 'about', 'services', 'volunteer', 'contact', 'give', 'blog'],
aboutlist: items,
bloglist: blogitems,
bootstrappedUser: req.user,
page: 'about'
});
});
});
});
有没有更好的方法,我可以采取让所有路线都有多个模型?
答案 0 :(得分:1)
您可以通过在res.locals
上设置属性来创建一个设置公共视图变量的中间件。这是一个例子:
app.use(function(req, res, next) {
res.locals.bootstrappedUser = req.user;
res.locals.homelist = [
'home', 'about', 'services', 'volunteer', 'contact', 'give', 'blog'
];
BlogData.find(function(err, blogitems) {
if (err)
return next(err);
res.locals.bloglist = blogitems;
next();
});
});
app.get('/about', function(req, res, next) {
AboutData.find(function(err, items){
if (err)
return next(err);
// here `index.js` will have access to `bootstrappedUser`, `homelist`, and
// `bloglist`
res.render('index.ejs',{
aboutlist: items,
page: 'about'
});
});
});
您还可以在app.locals
对象上以相同的方式设置变量。通常,您在设置Express应用期间在app.locals
设置非特定于请求的静态值,并在res.locals
上设置动态请求特定值。