node.js 中间件检查强制参数

Posted

技术标签:

【中文标题】node.js 中间件检查强制参数【英文标题】:node.js middleware to check mandatory parameters 【发布时间】:2011-08-08 23:16:39 【问题描述】:

我正在使用 node.js 并在我当前的应用程序中表达。 我创建了几个中间件函数,每个函数的创建方式如下:

function loadUser(req, res, next)
  ...

我想创建一个中间件,用于在一个明确的操作中检查强制性参数的存在。例如,我有一个 /user/create 操作,它需要昵称、密码、电子邮件……作为强制参数。然后我需要将此参数列表传递给中间件,以便它可以检查这些参数是否存在于 req.query 中。

有什么想法吗?

更新

我终于完成了以下操作(在 express 文档中,有一个需要附加参数 http://expressjs.com/guide.html#route-middleware 的中间件示例)。

function checkParams(arr)
  return function(req, res, next) 
    // Make sure each param listed in arr is present in req.query
    var missing_params = [];
    for(var i=0;i<arr.length;i++)
      if(! eval("req.query." + arr[i]))
        missing_params.push(arr[i]);
      
    
    if(missing_params.length == 0)
      next();
     else 
      next(JSON.stringify( "error" : "query error", "message" : "Parameter(s) missing: " + missing_params.join(",") ));
    
  

然后像其他中间件一样调用它:

app.post('/user/create', checkParams(["username", "password"]), function(req, res)
  ...
);

【问题讨论】:

参数是 url 或查询参数的一部分? /user/create/:name/:password/:email//user/create?username=...&amp;password=...&amp;email=... ? @Raynos,参数是查询的一部分。 不错。只是一个问题,为什么要使用 eval("req.query." + arr[i])req.query[arr[i]] 应该能胜任 如果你使用 req.param(arr[i]) 你可以检查 GET 或 POST 参数 【参考方案1】:

您是否尝试过将其实现为动态助手而不是中间件?它可能会起作用。

【讨论】:

在这种情况下,它会在所有中间件之后被调用,对吧?事实上,我希望这个参数检查器成为第一个调用的函数(在所有中间件之前)

以上是关于node.js 中间件检查强制参数的主要内容,如果未能解决你的问题,请参考以下文章

node.js之路由,中间件,ge请求和post请求的参数

快速中间件中的 Node.js JWT 刷新令牌

如何在 node.js express 中的路由 end() 之后停止中间件序列继续进行

node.js 常用模块(初级)

Node.js Express开发框架

Node.js Express开发框架