.intercept()
捕获并拦截指定的错误,自动修改并重新抛出,或指定一个新的错误来代替抛出。(仍然会抛出)
.intercept(filter, handler)
或
.intercept(handler)
(拦截所有错误)参数 | 类型 | 详情 | |
---|---|---|---|
1 | filter | 您想要拦截的错误代码,或用于识别要拦截的错误的条件字典。(如果未提供,将拦截所有错误) | |
2 | handler | 当预期错误被抛出时,Sails 将自动调用的 过程参数。它将接收在下面的“Handler”用法表中指定的参数。处理程序应返回修改后的错误、新的错误或(如果适用)特殊退出信号。 或者,除了函数之外,还可以提供字符串。这与传递一个仅返回字符串的处理程序函数相同。(在使用 actions2 时很方便) |
参数 | 类型 | 详情 | |
---|---|---|---|
1 | err | 正在拦截的预期错误。 |
返回一个错误实例或(如果适用)特殊退出信号,该信号将从原始逻辑抛出,而不是抛出被拦截的错误。
.intercept() 用于拦截特定类型的错误(或所有错误)。如果您继续使用 .intercept(),并且它与发生的错误匹配,那么底层逻辑将抛出。但是,它抛出的内容取决于您的处理程序函数返回的内容。
如果应用程序中的每个用户记录都需要具有唯一的电子邮件地址,您可能希望确保错误以这样一种方式格式化,即向最终用户显示适当的消息。要拦截该错误
var newUserRecord = await User.create({
emailAddress: inputs.emailAddress,
fullName: inputs.fullName,
})
.intercept('E_UNIQUE', ()=>{ return new Error('There is already an account using that email address!') })
.fetch();
或者,使用 特殊退出信号 在 actions2 操作 内部处理相同的错误;而不是错误实例
var newUserRecord = await User.create({
emailAddress: inputs.emailAddress,
fullName: inputs.fullName,
})
.intercept('E_UNIQUE', ()=>'emailAlreadyInUse')
.fetch();
请注意,我们上面示例中的用法也可以更简洁地写成
.intercept('E_UNIQUE', 'emailAlreadyInUse')
或者不太简洁地写成
.intercept({ code: 'E_UNIQUE' }, ()=>{ return 'emailAlreadyInUse'; })
有关
.intercept()
工作原理的更多示例和进一步说明,请查看 此相关对话。