我试图在一个模块中定义我的Joi模式并将其包含在不同的模块中(基本定义旨在在更多模块中共享以避免代码重复)。但似乎某些定义有效,其他则没有。
第1单元
import Joi from 'joi';
const working1 = Joi.string().alphanum().min(3).max(20).required();
const working2 = Joi.string().required().min(5);
const notWorking1 = Joi.number().default(0).min(0);
export default {
working1,
working2,
notWorking1,
};
第2单元
import m from './module1';
export default {
rule1: {
body: {
field1: r.working1,
field2: r.working2,
},
},
};
第3单元
import m from './module1';
export default {
rule2: {
query: {
field1: r.notWorking1,
},
},
};
某些验证架构运行良好,而在其他情况下,我得到一个奇怪的错误(例如 module3 )。像这样:
AssertionError [ERR_ASSERTION]: Invalid schema content: (rule2)
{"generatedMessage":false,"name":"AssertionError [ERR_ASSERTION]","code":"ERR_ASSERTION","actual":false,"expected":true,"operator":"==","path":"rule2"}
如果我在 module3 文件中包含验证架构而未从 module1 导入验证架构,则它会按预期工作。
使用快速验证模块将模式包含在ruotes中。
import { Router } from 'express';
import validation from 'express-validation';
import v3 from './module3';
import v2 from './module2';
router.get('/x', validation(v2.rule1), (req, res, next) => ... ); // working
router.get('/y', validation(v3.rule2), (req, res, next) => ... ); // not working
我希望它在任何情况下都有效。我错过了什么吗?