【问题标题】:how can I pass parameters from Express route to Node middleware如何将参数从 Express 路由传递到 Node 中间件
【发布时间】:2018-01-06 10:35:57
【问题描述】:

我在文档中找不到答案,我希望有一种方法可以满足我的需要。我有一些快速路线:

app.post( '/submit-agency-event'            , eventService.submitEvent );
app.post( '/submit-question'                , formService.submitQuestion );
app.post( '/submit-information-request'     , formService.submitInformationRequest );
app.post( '/social-worker-register-family'  , familyService.registerFamily );

每个路由使用中间件文件中的函数来处理请求。我想将一条路由限制为仅几个用户类型(存储在req.user.userType 上)。我想设置类似于以下的路线:

app.post( '/social-worker-register-child'   , middleware.requireUsersOfType( ['admin, social worker'] ), childService.registerChild );

然后在调用childService.registerChild() 之前使用函数requireUsersOfType() 处理处理和任何需要的重定向。

exports.requireUsersOfType = ( req, res, next, userTypesArray ) => {
    // processing
};

我似乎无法弄清楚如何将参数传递给requireUsersOfType() 函数。有谁知道如何做到这一点?

【问题讨论】:

    标签: node.js express keystonejs


    【解决方案1】:

    虽然不是最优雅的解决方案,但如果您无法按照其他人的建议使其正常工作,这应该可以解决问题:

    app.post( '/social-worker-register-child', function( req, res, next ) { middleware.requireUsersOfType( req, res, next, userTypes = ['admin, social worker'] ); }, childService.registerChild );
    

    然后您应该能够根据需要在中间件中进行处理:

    exports.requireUsersOfType = ( req, res, next, userTypesArray ) => {
        // processing
    };
    

    【讨论】:

      【解决方案2】:

      你可以使用Closures:

      闭包是函数和词法环境的组合 在其中声明了该函数。

      例子:

      exports.requireUsersOfType = (userTypesArray) => {
        return function(req, res, next) => {
          // your code...
        } 
      };
      

      【讨论】:

        猜你喜欢
        • 2016-03-05
        • 1970-01-01
        • 1970-01-01
        • 2015-08-06
        • 2021-07-29
        • 2017-11-21
        • 1970-01-01
        • 2021-06-14
        • 1970-01-01
        相关资源
        最近更新 更多