错误代码定义和检测

本功能需要 github.com/ma-guo/niuhe 版本 >=v1.0.5, niuhe 插件版本 >=0.6.20

当前插件支持通过 RPC().codes(...) 方式定义返回的错误代码列表。如果不进行额外处理, 在后端返回意料之外(非错误码列表中)的错误码时,后端无法感知到这一情形。为了支持这种检测, 我们需要再多做一些工作。

插件支持 .codes(LanguageType.ZH_CN, LanguageType.ZH_TW, Item(100, '错误描述')) 格式添加错误码。

codes 中包含Item 格式定义错误码时,将自动生成一个 ErrorEnumConstGroup 来定义错误码数据集, 此种方式更灵活。

利用下面的代码展示如何实现这一功能。

生成代码时, src/{mode}/app/views/init.go 文件内容如下:

package views

// Generated by niuhe.idl
import (
	"github.com/ma-guo/niuhe"
)

var thisModule *niuhe.Module

func GetModule() *niuhe.Module {
	if thisModule == nil {
		thisModule = niuhe.NewModule("${model}")
        // 需要在 .config.json5 中添加 langs: ["route"]
        // 使用下面的代码, 当错误码同 RPC 方式定义的 .codes(...) 不同时回收到回调
		// thisModule.AddRouteItem(protos.RouteItems...)
		// thisModule.RegisterCodeNotify(func(code int, path string) {
		// 	niuhe.LogError("code: %v with %v", code, path)
		// })
	}
	return thisModule
}
`

我们只需要在 .config.json5langs 中添加 "route", 然后将 GetModule 中被注释的三行代码打开即可快速实现检测这种非预期的错误码问题定位。

本功能优点

  • 无需修改业务代码, 即可实现错误码检测
  • 支持自定义错误码检测逻辑, 可主动发现意外错误码, 加快问题定位