如何将变量从route传递到controller Node.js JavaScript

如何将变量从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路由,它需要首先确保凭据有效,然后呈现相同的控制器,但传入

所以我有一个用户视图和一个管理员视图,除了管理员视图可以将新数据上传到我的web应用程序,该应用程序显示不同的图表;因此,我希望使用从数据库获取数据的同一个控制器

在控制器中,我需要它来呈现我的用户视图或管理视图,因此如何将其作为变量从路由传递给控制器,以告知要呈现的视图

例如,我有普通/用户路线,它所做的就是

//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
    }
}

这个答案节省了我几个小时的代码重构,哈哈。谢谢!多酷的回答啊!简单明了的英语,加油!!