如何将变量从路由传递给控制器​​Node.js JavaScript

Jos*_*ela 2 javascript variables model-view-controller routes node.js

所以我有一个非常相似的用户视图和管理视图,只是管理视图可以将新数据上传到我的web应用程序,显示不同的图表; 因此,我想使用从数据库中获取数据的相同控制器.

在控制器中,我需要它来渲染我的用户视图或我的管理视图,所以我如何将其作为路径中的变量传递给控制器​​告诉控制器要渲染哪个视图.

例如,我有正常/用户路由,它所做的就是它

//users

router.get('/', uploadController.get_detail);
Run Code Online (Sandbox Code Playgroud)

对于/ admin路由,它需要首先确保凭证有效,然后呈现相同的控制器,但传入不同的变量.这是因为在控制器中我有:

// uploadController

res.render('VIEW', { title: 'Test', data: results });
Run Code Online (Sandbox Code Playgroud)

而VIEW是我想要变量的地方.因此,如果它来自/ users route,那么它会发送一个变量'users',这将呈现我的users.pug视图.与将显示我的admin.pug视图的/ admin路由相同.

Mar*_*yer 6

它看起来像是uploadController.get_detail()一个中间件功能吗?所以它有一个看起来像这样的签名:

uploadController.get_detail(req, res, next)
Run Code Online (Sandbox Code Playgroud)

对?

您通常处理将数据传递到中间件的方法是将变量置于res.locals中间件上,然后中间件可以将其拾取.例如:

router.get('/', 
    function(req, res, next){ 
       res.locals.admin = true
       next()
    },
    uploadController.get_detail
);
Run Code Online (Sandbox Code Playgroud)

然后在get_detail()你可以从res对象中读取它:

uploadController.get_detail(req, res, next) {
    if (res.locals.admin) {
      // do admin stuff
    }
}
Run Code Online (Sandbox Code Playgroud)