【问题标题】:How do I throw a tv4 error with a message?如何在消息中引发 tv4 错误?
【发布时间】:2016-08-22 06:30:36
【问题描述】:

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

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)

如何在消息中抛出无效架构?

【问题讨论】:

  • 你没有,它显然已经在 tv4 API 中抛出。只需捕获错误,然后在需要时将其抛出:try { tv4.validate(...); } catch(e) { ... }
  • .validate 函数正在为我返回一个布尔值。不是扔。
  • 你不会抛出“一个东西”你会抛出错误,所以你需要从tv4.errorthrow new Error("something stringy")中获取相关数据以及你需要的信息,比如tv4.error.message。也就是说,抛出通常是一个糟糕的主意,因为您想了解所有故障,而不仅仅是“第一次”,然后花一天时间一个一个地修复它们。那太可怕了。
  • tv4.error 确实不是“事物”,而是错误对象。附加的消息应该是抛出的消息。只要其他subErrors 在对象中,我就可以使用它们向用户响应错误列表。
  • 不,我的意思是你不要抛出“任意的东西”,如果你想正确地抛出,你需要抛出一个实际的错误对象,使用new Error("...")。抛出 tv4.error 中的任何内容都行不通,因此鉴于 API 文档,您想要 throw new Error(tv4.error.message)

标签: javascript json error-handling


【解决方案1】:

感谢这救了我几乎一半的 lyf :),谢谢大家 对于其他人,请始终使用以下 3 行进行架构测试:

  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

【讨论】:

    猜你喜欢
    • 2019-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-27
    • 2018-12-09
    • 1970-01-01
    • 2011-11-05
    • 1970-01-01
    相关资源
    最近更新 更多