Loopback远程方法属性验证:min/max不生效如何解决?
解决Loopback远程方法min/max验证不生效的问题
我来帮你搞定这个验证规则不生效的问题~ 其实核心原因是Loopback的远程方法参数默认不会自动触发min/max这类验证规则,只有required是基础必填检查,所以它能正常工作。另外还要注意字符串和数字类型的验证规则是有区别的,我给你几个可行的解决方案:
方法一:用validation字段指定验证规则(Loopback 3适用)
把你的min/max规则放到validation对象里,而且字符串类型的长度验证要改用minLength和maxLength(min/max是给数字类型用的)。修改后的配置如下:
{ "name": "registration", "methods": { "registrationIn": { "accepts": [ { "arg": "firstname", "type": "string", "required": true, "description": "Firstname of the person.", "http": { "source": "form" }, "validation": { "minLength": 1, "maxLength": 25 } }, { "arg": "mobile", "type": "number", "required": true, "description": "", "http": { "source": "form" }, "validation": { "min": 1, "max": 10 } } ], "returns": [], "description": "This method used to registration.", "http": [{ "path": "/registrationIn", "verb": "post" }] } } }
方法二:定义参数模型复用验证规则
这种方式更适合复杂的参数验证,也方便后续维护。先创建一个参数模型RegistrationInput(放在common/models/registration-input.json):
{ "name": "RegistrationInput", "base": "Model", "properties": { "firstname": { "type": "string", "required": true, "minLength": 1, "maxLength": 25, "description": "Firstname of the person." }, "mobile": { "type": "number", "required": true, "min": 1, "max": 10 } } }
然后在远程方法配置里直接引用这个模型作为参数类型:
{ "name": "registration", "methods": { "registrationIn": { "accepts": [ { "arg": "data", "type": "RegistrationInput", "required": true, "http": { "source": "form" } } ], "returns": [], "description": "This method used to registration.", "http": [{ "path": "/registrationIn", "verb": "post" }] } } }
这样模型里的所有验证规则都会自动应用到远程方法的参数上,非常省心。
方法三:手动在方法实现里添加验证
如果上面两种方式都不适用,你可以直接在远程方法的代码里手动检查参数,然后抛出错误:
module.exports = function(Registration) { Registration.registrationIn = function(firstname, mobile, callback) { // 验证用户名长度 if (!firstname || firstname.length < 1 || firstname.length > 25) { return callback(new Error('Firstname must be between 1 and 25 characters.')); } // 验证手机号范围 if (mobile < 1 || mobile > 10) { return callback(new Error('Mobile number must be between 1 and 10 digits.')); } // 这里写你的业务逻辑 callback(null); }; // 别忘了注册远程方法的配置 Registration.remoteMethod('registrationIn', { accepts: [ { arg: 'firstname', type: 'string', required: true, http: { source: 'form' } }, { arg: 'mobile', type: 'number', required: true, http: { source: 'form' } } ], returns: [], http: [{ path: '/registrationIn', verb: 'post' }] }); };
内容的提问来源于stack exchange,提问作者uday214125
相关产品推荐
相关产品推荐

