用于检查强制参数的 Node.js 中间件

发布于 2024-11-02 11:46:36 字数 1140 浏览 0 评论 0 原文

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

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){
  ...
});

I'm using node.js and express in my current app.
I have created several middleware functions, each one being created like:

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

I'd like to create a middleware that would check the existence of mandatory params in an express action. For instance, I have a /user/create action which needs nickname, password, email, ... as mandatory parameters. I would then need to pass this list of params to a middleware so it can check if those parameters exist in the req.query.

Any idea ?

UPDATE

I've finally done the following (in express documentation, there is an example of middleware that require additional parameter 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(",") }));
    }
  }
}

It is then called like the other middlewares:

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

夏尔 2024-11-09 11:46:36

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

Have you tried implementing it as a dynamic helper instead of a middleware? It might work.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文