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