mirror of
https://github.com/kataras/iris.git
synced 2025-01-23 10:41:03 +01:00
add response recorder section
parent
d72c3fc2ec
commit
fffdbf67a3
1
Home.md
1
Home.md
|
@ -23,6 +23,7 @@ This wiki is the main source of documentation for **developers** working with (o
|
||||||
* [[Context Methods|Routing-context-methods]]
|
* [[Context Methods|Routing-context-methods]]
|
||||||
* [[API Versioning]]
|
* [[API Versioning]]
|
||||||
* [[Content Negotiation]]
|
* [[Content Negotiation]]
|
||||||
|
* [[Response Recorder]]
|
||||||
* [[HTTP Referer]]
|
* [[HTTP Referer]]
|
||||||
* [[Request Authentication]]
|
* [[Request Authentication]]
|
||||||
* [[URL Query Parameters]]
|
* [[URL Query Parameters]]
|
||||||
|
|
104
Response-recorder.md
Normal file
104
Response-recorder.md
Normal file
|
@ -0,0 +1,104 @@
|
||||||
|
A response recorder is an Iris specific `http.ResponseWriter` which records the sent body, status code and headers that you can manipulate at any handler inside a route's request handlers chain.
|
||||||
|
|
||||||
|
1. Call `Context.Record()` before send data.
|
||||||
|
2. The `Context.Recorder()` returns a [ResponseRecorder](https://godoc.org/github.com/kataras/iris/context#ResponseRecorder). Its methods can be used to manipulate or retrieve the response.
|
||||||
|
|
||||||
|
The `ResponseRecorder` type contains the standard Iris ResponseWriter methods plus the following methods.
|
||||||
|
|
||||||
|
Body **returns** the body tracked from the writer so far.
|
||||||
|
Do not use this for edit.
|
||||||
|
|
||||||
|
```go
|
||||||
|
Body() []byte
|
||||||
|
```
|
||||||
|
|
||||||
|
Use this to clear the body.
|
||||||
|
|
||||||
|
```go
|
||||||
|
ResetBody()
|
||||||
|
```
|
||||||
|
|
||||||
|
Use `Write/Writef/WriteString` to stream write and `SetBody/SetBodyString` to **set** body instead.
|
||||||
|
|
||||||
|
```go
|
||||||
|
Write(contents []byte) (int, error)
|
||||||
|
|
||||||
|
Writef(format string, a ...interface{}) (n int, err error)
|
||||||
|
|
||||||
|
WriteString(s string) (n int, err error)
|
||||||
|
|
||||||
|
SetBody(b []byte)
|
||||||
|
|
||||||
|
SetBodyString(s string)
|
||||||
|
```
|
||||||
|
|
||||||
|
Reset headers to their original state, before `Context.Record` call.
|
||||||
|
|
||||||
|
```go
|
||||||
|
ResetHeaders()
|
||||||
|
```
|
||||||
|
|
||||||
|
Clear all headers.
|
||||||
|
|
||||||
|
```go
|
||||||
|
ClearHeaders()
|
||||||
|
```
|
||||||
|
|
||||||
|
Reset resets the response body, headers and the status code header.
|
||||||
|
|
||||||
|
```go
|
||||||
|
Reset()
|
||||||
|
```
|
||||||
|
|
||||||
|
## Example
|
||||||
|
|
||||||
|
Record operation log in global Interceptor.
|
||||||
|
|
||||||
|
```go
|
||||||
|
package main
|
||||||
|
|
||||||
|
import "github.com/kataras/iris"
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
app := iris.New()
|
||||||
|
|
||||||
|
// start record.
|
||||||
|
app.Use(func(ctx iris.Context) {
|
||||||
|
ctx.Record()
|
||||||
|
ctx.Next()
|
||||||
|
})
|
||||||
|
|
||||||
|
// collect and "log".
|
||||||
|
app.Done(func(ctx iris.Context) {
|
||||||
|
body := ctx.Recorder().Body()
|
||||||
|
|
||||||
|
// Should print success.
|
||||||
|
app.Logger().Infof("sent: %s", string(body))
|
||||||
|
})
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
Register the routes...
|
||||||
|
|
||||||
|
```go
|
||||||
|
app.Get("/save", func(ctx iris.Context) {
|
||||||
|
ctx.WriteString("success")
|
||||||
|
ctx.Next() // calls the Done middleware(s).
|
||||||
|
})
|
||||||
|
```
|
||||||
|
|
||||||
|
Or to remove the need of `ctx.Next` in your main handlers, modify the Iris handlers [execution rules](https://github.com/kataras/iris/blob/master/_examples/mvc/middleware/without-ctx-next/main.go) as follows.
|
||||||
|
|
||||||
|
```go
|
||||||
|
// It applies per Party and its children,
|
||||||
|
// therefore, you can create a routes := app.Party("/path")
|
||||||
|
// and set middlewares, their rules and the routes there as well.
|
||||||
|
app.SetExecutionRules(iris.ExecutionRules{
|
||||||
|
Done: iris.ExecutionOptions{Force: true},
|
||||||
|
})
|
||||||
|
|
||||||
|
// [The routes...]
|
||||||
|
app.Get("/save", func(ctx iris.Context) {
|
||||||
|
ctx.WriteString("success")
|
||||||
|
})
|
||||||
|
```
|
|
@ -18,6 +18,7 @@
|
||||||
* [[Context Methods|Routing-context-methods]]
|
* [[Context Methods|Routing-context-methods]]
|
||||||
* [[API Versioning]]
|
* [[API Versioning]]
|
||||||
* [[Content Negotiation]]
|
* [[Content Negotiation]]
|
||||||
|
* [[Response Recorder]]
|
||||||
* [[HTTP Referer]]
|
* [[HTTP Referer]]
|
||||||
* [[Request Authentication]]
|
* [[Request Authentication]]
|
||||||
* [[URL Query Parameters]]
|
* [[URL Query Parameters]]
|
||||||
|
|
Loading…
Reference in New Issue
Block a user