my fastify 3(ajv6)使用以下设置:
ajv: {
customOptions: {
allErrors: true,
removeAdditional: true,
jsonPointers: true
},
plugins: [require('ajv-errors')],
},
由于ajv8删除了jsonpointers,所以我删除了它。
但它仍然在我的项目中抛出错误。复制项目在本回购中,请查收。https://github.com/radiorz/fastify-lerna-ajv-error-demo
错误消息:
编译架构时出错,函数代码:constschema26=scope.schema[20];const obj0=scope.obj[0];返回函数validate24(data,{instancePath=",parentData,parentDataProperty,rootData=data}={}{missingProperty:"parameters"},消息:";必须具有必需的属性"+"参数"+"'"};if(vErrors===null){vErrors=[err0];}else{vErrors.push(err0);}errors++;}for(数据中的const key0){if(!(key0==="parameters")){delete data[key0];}if(data.parameters!==undefined){let data0=data.parameters;if(typeof data0!=="string"){let-dataType0=typeofdata0;let-conforced0=undefineed;if(dataType0=='object'&Array.isArray(data0)&data0.length=1){data0=data0[0];dataType0=type的数据0;如果(typeof data0==="string"){胁迫0=data0;}如果(!"#/properties/parameters/type",关键字:"type",params:{类型:"字符串"},消息:";必须是字符串"}";if(vErrors===null){vErrors=[err1];}else{vErrors.push(err1);}errors++;}}if(胁迫0!==未定义){data0=胁迫0;if(data!==undefined){data[quot;parameters"]=胁迫0;}else{const err2={instancePath,schemaPath:quot;#/type"必须是对象"}";if(vErrors===null){vErrors=[err2];}else{vErrors.push(err2);}errors++;}如果(errors>0){const-emErrors0={"required":{"parameters":[]}};let emParamsErrors0;for(vErrors的const err3){if({quot;str":"err3"}.keyword!=="errorMessage")&;(!{"str":"err3"}.emUsed))&;({"str":"err3"}.instancePath==instancePath))&;({"str":"err3"}.关键字在{"tr&":"emErrors0&"}中)&;({"str":"err3"}.schemaPath.indexOf("#")==0))&;(/^/[^/]*$/test({quot;str":"err3"}.schemaPath.slice(1))PropParams0"}]];if(emParamsErrors0){{"str":"emParamsErrors0"}.push({"str":"err3"});{"str":"err3"}.emUsed=true;}}用于emErro 中的(const key1
有同样的错误-有解决方案吗?
"挑剔":"4.1.0";"ajv错误":"3.0.0〃;
ajv: {
customOptions: {
allErrors: true,
},
plugins: [AjvErrors],
},
错误:找不到模块"ajv">
编辑:看起来像是重新安装节点模块修复了这个问题-如果你使用的是fasify 4或更高版本,你可以使用ajv错误3如果你使用低于fastify的版本4,你必须使用ajv误差1