如何将变量从route传递到controller Node.js JavaScript
所以我有一个用户视图和一个管理员视图,除了管理员视图可以将新数据上传到我的web应用程序,该应用程序显示不同的图表;因此,我希望使用从数据库获取数据的同一个控制器 在控制器中,我需要它来呈现我的用户视图或管理视图,因此如何将其作为变量从路由传递给控制器,以告知要呈现的视图 例如,我有普通/用户路线,它所做的就是如何将变量从route传递到controller Node.js JavaScript,javascript,node.js,variables,model-view-controller,routes,Javascript,Node.js,Variables,Model View Controller,Routes,所以我有一个用户视图和一个管理员视图,除了管理员视图可以将新数据上传到我的web应用程序,该应用程序显示不同的图表;因此,我希望使用从数据库获取数据的同一个控制器 在控制器中,我需要它来呈现我的用户视图或管理视图,因此如何将其作为变量从路由传递给控制器,以告知要呈现的视图 例如,我有普通/用户路线,它所做的就是 //users router.get('/', uploadController.get_detail); 对于/admin路由,它需要首先确保凭据有效,然后呈现相同的控制器,但传入
//users
router.get('/', uploadController.get_detail);
对于/admin路由,它需要首先确保凭据有效,然后呈现相同的控制器,但传入不同的变量。这是因为在控制器中,我有:
// uploadController
res.render('VIEW', { title: 'Test', data: results });
视图就是我想要变量的位置。因此,如果它来自/users路由,那么它将被发送一个变量“users”,这将呈现my users.pug视图。与/admin路由相同,它将呈现我的admin.pug视图。它看起来像是
uploadController.get\u detail()
是中间件函数吗?所以它有一个签名,看起来像:
uploadController.get_detail(req, res, next)
对吧?
通常处理将数据传递给中间件的方法是在res.locals
上放置一个变量,然后中间件可以拾取它。例如:
router.get('/',
function(req, res, next){
res.locals.admin = true
next()
},
uploadController.get_detail
);
然后在get_detail()
中,您可以从res
对象中读取它:
uploadController.get_detail(req, res, next) {
if (res.locals.admin) {
// do admin stuff
}
}
这个答案节省了我几个小时的代码重构,哈哈。谢谢!多酷的回答啊!简单明了的英语,加油!!