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

标签 javascript node.js express

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

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!');
});

关于javascript - 验证node.js中的请求并在错误时退出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25838265/

相关文章:

node.js - 使用 sequelize 时如何解决 SequelizeDatabaseError NaN?

javascript - Knockout.js "with"绑定(bind)和动态 html

node.js - 如何在 Firebase Cloud Functions 中捆绑和要求非 JS 依赖项?

javascript - Breeze:如何根据另一个属性的值验证一个属性

javascript - Google BigQuery Node 库 : how to stream data in batches?

node.js - 在 Node.js 中更新 MongoDB 的查询

node.js - 文件中的多个 Mongoose 模式不起作用

node.js - 使用 Passport 、express、nodejs 进行 Metamask 身份验证

javascript - 在执行 JavaScript 中的某些函数之前等待/暂停代码执行给定的时间

javascript - 如何从 Rails 5.1.3 + webpacker 的 View 中使用 jquery