0

我正在使用以下节点模块进行验证: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); }

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

4

3 回答 3

0

他们的文档说你可以做到这一点

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

这样你就不用 try catch

于 2013-09-15T15:48:23.757 回答
0

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

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

于 2013-09-15T13:43:41.023 回答
0

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

虽然,文档确实包含一个使用“错误处理”下的方法node-validator扩展Validators的示例。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()

于 2013-09-15T14:35:10.190 回答