Javascript 如何通过消息抛出tv4错误?

Javascript 如何通过消息抛出tv4错误?,javascript,json,error-handling,Javascript,Json,Error Handling,下面的数据架构中有一个错误,并且测试中存在一个验证失败的对象。我可以抛出错误,但没有错误消息 var tv4 = require('tv4') var schema = { "items": { "type": "boolean" } } tv4.setErrorReporter(function (error, data, schema) { return "Custom error message" }) var data1 = [true, false] var dat

下面的数据架构中有一个错误,并且测试中存在一个验证失败的对象。我可以抛出错误,但没有错误消息

var tv4 = require('tv4')

var schema = {
 "items": {
   "type": "boolean"
 }
}

tv4.setErrorReporter(function (error, data, schema) {
  return "Custom error message"
})

var data1 = [true, false]
var data2 = [true, 123]

console.log(tv4.validate(data1, schema))
if (tv4.error) throw tv4.error
console.log(tv4.validate(data2, schema))
if (tv4.error) throw tv4.error
该消息仍然没有错误消息

Error
    at new ValidationError (/project/node_modules/tv4/tv4.js:1461:12)
    at ValidatorContext.createError (/project/node_modules/tv4/tv4.js:359:14)
    at ValidatorContext.validateType (/project/node_modules/tv4/tv4.js:751:14)
    at ValidatorContext.validateBasic (/project/node_modules/tv4/tv4.js:721:19)
    at ValidatorContext.validateAll (/project/node_modules/tv4/tv4.js:599:19)
    at ValidatorContext.validateArrayItems (/project/node_modules/tv4/tv4.js:947:21)
    at ValidatorContext.validateArray (/project/node_modules/tv4/tv4.js:880:11)
    at ValidatorContext.validateAll (/project/node_modules/tv4/tv4.js:602:11)
    at Object.api.validate (/project/node_modules/tv4/tv4.js:1573:24)
    at Object.<anonymous> (tv4-test.js:20:17)
错误
在新的验证错误(/project/node_modules/tv4/tv4.js:1461:12)
在ValidatorContext.createError(/project/node_modules/tv4/tv4.js:359:14)
在ValidatorContext.validateType(/project/node_modules/tv4/tv4.js:751:14)
位于ValidatorContext.validateBasic(/project/node_modules/tv4/tv4.js:721:19)
在ValidatorContext.validateAll(/project/node_modules/tv4/tv4.js:599:19)
位于ValidatorContext.validatorrayItems(/project/node_modules/tv4/tv4.js:947:21)
位于ValidatorContext.validatorray(/project/node_modules/tv4/tv4.js:880:11)
在ValidatorContext.validateAll(/project/node_modules/tv4/tv4.js:602:11)
在Object.api.validate(/project/node_modules/tv4/tv4.js:1573:24)
反对。(tv4-test.js:20:17)

我怎样才能用消息抛出一个无效的模式?

谢谢这节省了我几乎一半的lyf:),谢谢大家 对于其他人,请始终使用以下三行进行模式测试:

  console.log(" Schema Valid " +JSON.stringify(tv4.validate(jsonData ,schema)));
  console.log("Validation errors: "+ tv4.error);
  console.log(tv4.error.dataPath); 
输出将如下所示:

日志

false
Validation errors: ValidationError: Invalid type: string (expected integer)
/guardVerificationUrl
此外,如果您想知道所使用的错误类型:

console.log(tv4.error.schemaPath); 
输出:

/properties/guardVerificationUrl/type

谢谢这救了我一半的生命:),谢谢大家 对于其他人,请始终使用以下三行进行模式测试:

  console.log(" Schema Valid " +JSON.stringify(tv4.validate(jsonData ,schema)));
  console.log("Validation errors: "+ tv4.error);
  console.log(tv4.error.dataPath); 
输出将如下所示:

日志

false
Validation errors: ValidationError: Invalid type: string (expected integer)
/guardVerificationUrl
此外,如果您想知道所使用的错误类型:

console.log(tv4.error.schemaPath); 
输出:

/properties/guardVerificationUrl/type

你不知道,它显然已经在TV4API中抛出了。只要捕获错误,然后在需要时抛出它:
尝试{tv4.validate(…);}catch(e){…}
函数正在为我返回一个布尔值。它不是抛出。你不会抛出“一件事”而是抛出错误,因此你需要从
tv4.error
中获取相关数据,然后
抛出新的错误(“严格的东西”)
以及你需要的信息,如。也就是说,投掷通常是一个糟糕的想法,因为你想知道所有的失败,而不仅仅是“第一次”,然后花一天的时间逐一修复它们。那太可怕了。
tv4.error
确实不是什么“东西”,而是一个错误对象。附加的消息应该是抛出的消息。只要其他
子错误
在对象中,我就可以使用它们向用户响应错误列表。不,我的观点是,您不会抛出“任意东西”,如果您想正确抛出,您需要使用
新错误(“…”)
抛出实际的错误对象。抛出
tv4.error
中发生的任何错误都不起作用,因此给定API文档,您希望
抛出新错误(tv4.error.message)
如果不想,它显然已经在tv4 API中抛出了。只要捕获错误,然后在需要时抛出它:
尝试{tv4.validate(…);}catch(e){…}
函数正在为我返回一个布尔值。它不是抛出。你不会抛出“一件事”而是抛出错误,因此你需要从
tv4.error
中获取相关数据,然后
抛出新的错误(“严格的东西”)
以及你需要的信息,如。也就是说,投掷通常是一个糟糕的想法,因为你想知道所有的失败,而不仅仅是“第一次”,然后花一天的时间逐一修复它们。那太可怕了。
tv4.error
确实不是什么“东西”,而是一个错误对象。附加的消息应该是抛出的消息。只要其他
子错误
在对象中,我就可以使用它们向用户响应错误列表。不,我的观点是,您不会抛出“任意东西”,如果您想正确抛出,您需要使用
新错误(“…”)
抛出实际的错误对象。抛出发生在
tv4.error
中的任何错误都不起作用,因此给定API文档,您希望
抛出新错误(tv4.error.message)