企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持知识库和私有化部署方案 广告
File: mvc/session-controller/main.go ~~~ // +build go1.9 package main import ( "fmt" "time" "github.com/kataras/iris" "github.com/kataras/iris/mvc" "github.com/kataras/iris/sessions" ) // VisitController处理根路由. type VisitController struct { // 当前的请求会话, //它的初始化是由我们添加到的依赖函数发生的 `visitApp`. Session *sessions.Session //从MVC绑定的time.time, // 绑定字段的顺序无关紧要. StartTime time.Time } // Get handles // Method: GET // Path: http://localhost:8080 func (c *VisitController) Get() string { //它将整数的“visits”值递增1", //如果带有“访问”键的条目不存在,它将为您创建. visits := c.Session.Increment("visits", 1) // 写下当前的,更新的访问. since := time.Now().Sub(c.StartTime).Seconds() return fmt.Sprintf("%d visit(s) from my current session in %0.1f seconds of server's up-time", visits, since) } func newApp() *iris.Application { app := iris.New() sess := sessions.New(sessions.Config{Cookie: "mysession_cookie_name"}) visitApp := mvc.New(app.Party("/")) // 绑定当前* session.Session,这是必需的 `VisitController.Session` // 和时间。现在time.Now() to the `VisitController.StartTime`. visitApp.Register( // 如果依赖是一个接受的函数 // 一个Context并返回一个值 // 然后控制器解析该函数​​的结果类型 // 并且在每个请求上它将使用其Context调用该函数 // 并将结果(the* sessions.Session)设置为控制器的字段. // // 如果在没有字段或函数的输入参数的情况下注册依赖项 // 消费者然后在服务器运行之前忽略这些依赖项, // 所以你可以绑定许多dependecies并在不同的控制器中使用它们. sess.Start, time.Now(), ) visitApp.Handle(new(VisitController)) return app } func main() { app := newApp() // 1. 打开浏览器(不在私人模式下) // 2. navigate to http://localhost:8080 // 3.有时刷新页面 // 4. 关闭浏览器 // 5. 重新打开浏览器并重新播放2。 app.Run(iris.Addr(":8080"), iris.WithoutVersionChecker) } ~~~ File: mvc/session-controller/main_test.go ~~~ package main import ( "testing" "github.com/kataras/iris/httptest" ) func TestMVCSession(t *testing.T) { e := httptest.New(t, newApp(), httptest.URL("http://example.com")) e1 := e.GET("/").Expect().Status(httptest.StatusOK) e1.Cookies().NotEmpty() e1.Body().Contains("1 visit") e.GET("/").Expect().Status(httptest.StatusOK). Body().Contains("2 visit") e.GET("/").Expect().Status(httptest.StatusOK). Body().Contains("3 visit") } ~~~