繁体   English   中英

验证node.js中的请求并在出错时退出

[英]Validating request in node.js and quiting if error

因此,当用户从我的服务器请求资源时,我当然希望确认请求本身是“安全的”且有效的。 当前,在我的代码中,我使用此自制程序解决方案,如下所示:

if(assertThat(validator.isAlphanumeric,data.currentQuestion,next)){return;}

其中assertThat()在哪里

var assertThat = function(func,value,next){
    if(!func(value)){
        var err = new Error("[...]");
        err.status = 422;
        next(err);
        return true;
    }
}

这很好用,但是if那里的阻止进一步执行的语句使我有些恼火(正确缩进会占用太多空间,而在一行上写看起来很丑)。 Express框架中是否有一种方法可以设计一个无需if语句就可以工作的功能? 我可能会问不可能的事,但是由于我对node.js的经验有限,因此我试图尽可能精美地设计此应用程序,但我仍在进行检查。

确实,唯一可以绕过if是,如果在以前使用assertThat()任何路由处理程序或中间件之前插入自定义中间件函数。例如,中间件可以采用要应用于验证器的验证器列表。请求。 例:

function validate(validators) {
  return function(req, res, next) {
    var data = req.body;
    for (var i = 0, validators.length, v; i < len; ++i) {
      v = validators[i];
      if (!v.fn(data[v.name])) {
        var err = new Error('[...]');
        err.status = 422;
        return next(err);
      }
    }
    next();
  };
}

然后,您可以像这样使用它:

app.get('/foo',
        validate([
          { fn: validator.isAlphanumeric, name: 'currentQuestion' }
        ]),
        function(req, res) {
  res.send('Passed validation!');
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM