我正在使用以下节点模块进行验证: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); }
??我不知道,请澄清在这种情况下最好的方法是什么。提前谢谢。
答案 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'
这样你就不用去试试了