【问题标题】:How to pass variable from route to controller Node.js JavaScript如何将变量从路由传递到控制器 Node.js JavaScript
【发布时间】:2018-09-09 01:13:43
【问题描述】:

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

在控制器中,我需要它来呈现我的用户视图或我的管理视图,所以我如何将它作为变量从路由传递以告诉控制器要呈现哪个视图。

例如,我有正常的 /users 路由,它所做的只是

//users

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

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

// uploadController

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

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

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 这个答案为我节省了数小时的代码重构,哈哈。谢谢!
    • 多么酷的答案!简单明了的英语,走的路!!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-12-09
    • 1970-01-01
    • 1970-01-01
    • 2015-11-20
    • 2016-03-03
    • 2017-06-02
    • 2015-01-06
    相关资源
    最近更新 更多