在node.js中集成验证模块

时间:2013-09-15 13:36:42

标签: node.js

我正在使用以下节点模块进行验证:https://github.com/chriso/node-validator

现在,假设我想检查一下这样的用户输入check('abc').isInt();我发现它基本上会抛出错误!

我对node.js很新,但在我看来,每次我需要检查用户输入时都必须使用try{}catch(e){}块,这有点过分。

拥有像

这样的东西不会更有意义
if (check('abc').isInt()) {
  // Do things here
  next(null, stuff_I_want_to_return)
} else next(error);

而不是

try{
  check('abc').isInt()
  next(null, stuff_I_want_to_return)
} catch(e) { next(e); }

??我不知道,请澄清在这种情况下最好的方法是什么。提前谢谢。

3 个答案:

答案 0 :(得分:0)

检查模块core-util-is,提供Node v0.12中引入的功能。

在您的情况下,方法 isNumber 会有所帮助

答案 1 :(得分:0)

对于throw的同步函数,它在Node.js中仍然很常见,因为它们通常没有回调来传递error。但是,他们仍然需要某种方式将其传递给调用代码,return error;通常是一个意想不到的选择。

尽管如此,node-validator的文档确实包含了使用“Error Handling下的Validator方法扩展getErrors()”的示例。

Validator.prototype.error = function (msg) {
    this._errors.push(msg);
    return this;
}

Validator.prototype.getErrors = function () {
    return this._errors;
}

可用于报告没有throw的错误:

var validator = new Validator();

if (validator.check('abc').isInt()) {
    next(null, ...);
} else {
    next(validator.getErrors());
}

注意:使用_errors后,.check()属性应为already be defined

答案 2 :(得分:0)

他们的文件说你可以这样做

var Validator = require('validator').Validator;
var v = new Validator();
v.error = function(msg) {
    console.log('Fail');
}
v.check('abc').isInt(); //'Fail'

这样你就不用去试试了