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

时间:2018-03-30 00:27:05

标签: javascript node.js variables model-view-controller routes

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

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

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

//users

router.get('/', uploadController.get_detail);

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

// uploadController

res.render('VIEW', { title: 'Test', data: results });

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

1 个答案:

答案 0 :(得分:5)

看起来uploadController.get_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
    }
}