在中间件中,我想读取请求主体来执行一些检查.然后,请求被传递到下一个中间件,在那里将再次读取正文.这是我做的:
bodyBytes, _ := ioutil.ReadAll(req.Body)
req.Body = ioutil.NopCloser(bytes.NewBuffer(bodyBytes))
// use bodyBytes
// pass to next middleware
Run Code Online (Sandbox Code Playgroud)
现在,req.Body.Close什么都不做.自从上一次req.Body.Close实现做了一些连接处理以来它会破坏吗?
Vol*_*ker 19
自从上一次req.Body.Close实现做了一些连接处理以来它会破坏吗?
没有.
但是你的代码很麻烦:一旦你完成所有这些操作,你应该关闭req.Body.然后你就像你一样构建一个新的ReadCloser,然后把它交给下一个中间件(它本身或其他东西负责关闭的中间件.)
bodyBytes, _ := ioutil.ReadAll(req.Body)
req.Body.Close() // must close
req.Body = ioutil.NopCloser(bytes.NewBuffer(bodyBytes))
Run Code Online (Sandbox Code Playgroud)