[beego]想通过filter获取controller返回的数据做处理,但是似乎拿不到

2024-06-26 492 views
2

使用的版本信息: beego v1.12.2 go1.14.4

遇到的问题: 项目已经大量使用WriteString和少量的ServeJSON函数来做返回,希望通过添加过滤器的方式来获取返回值,做统一的格式规范,和日志处理,但是在content里面没找到获取的方式;

请问有可以获取到返回值的方法吗?

回答

1

虽然可以自己重新封装返回值处理函数来代替之前直接的WriteString和ServeJSON,但是工作量很大,之前项目中所有涉及到的地方都需要进行修改;

所以看看能不能通过过滤器进行统一方便的处理

1
type FilterFunc func(ctx *context.Context)

这个ctx里面含有字段OutPut,你应该都能拿到。 注意的是,你注册的这个Filter是要在业务逻辑执行完毕之后的Filter,而不是之前的Filter,否则你还是拿不到响应。

4

确实能够拿到output,但是output只发现了写入相关的函数和状态判断的函数,没有获取已经写入的数据的函数;而且Output只有Context、Status和EnableGzip这三个字段,继续拿Context不就套娃了嘛

6

抱歉,是我记错了。我看了一下源码,的确是没办法拿到,唯独能够拿到的是ResponseWriter,但是从其实现里面也拿不到——包括使用反射,因为从Beego到底层http库都没有持有数据,只是把数据发给了writer

我在想说,beego是否有必要保存一下response body,以解决你面临的这种问题。比如说放到OutPut里面。

使用场景是有的,只是保存ResponseBody会耗费更多的内存,我有点犹豫。

7

那还是不用增加这种功能了,毕竟这个只是一个考虑嘛,加了对性能肯定也是会有一些影响的; 还是通过走自定义的返回值处理函数来处理吧;

Thanks♪(・ω・)ノ