Preprocessor¶
所有拦截器的Before()方法执行之后,向后端service发送请求之前,会执行Preprocessor。
Preprocessor可以用来执行一些某个API特有的逻辑,比如,参数校验,设置默认值,做类型转换,记录log等等。
下面的例子中,对参数’num’的值做了一些校验:
func RegisterComponents(s *turbo.GrpcServer) {
+ s.RegisterComponent("preEatApple", preEatApple)
}
+var preEatApple turbo.Preprocessor = func (resp http.ResponseWriter, req *http.Request) error {
+ num,err := strconv.Atoi(req.Form["num"][0])
+ if err!=nil {
+ resp.Write([]byte("'num' is not numberic"))
+ return errors.New("invalid num")
+ }
+ if num > 5 {
+ resp.Write([]byte("Too many apples!"))
+ return errors.New("Too many apples")
+ }
+ return nil
+}
编辑 “yourservice/service.yaml”:
+preprocessor:
+ - GET /eat_apple/{num:[0-9]+} preEatApple
重启服务并测试:
$ curl -w "\n" "http://localhost:8081/eat_apple/5"
message:"Good taste! Apple num=5"
$ curl -w "\n" "http://localhost:8081/eat_apple/6"
Too many apples!