IRIS session控制器

目录结构

主目录sessionController

  1. —— main.go
  2. —— main_test.go

代码示例

main.go

  1. // +build go1.9
  2. package main
  3. import (
  4. "fmt"
  5. "time"
  6. "github.com/kataras/iris"
  7. "github.com/kataras/iris/mvc"
  8. "github.com/kataras/iris/sessions"
  9. )
  10. // VisitController处理根路由
  11. type VisitController struct {
  12. //当前请求会话
  13. //它的初始化是由我们添加到`visitApp`的依赖函数发生的
  14. Session *sessions.Session
  15. //从MVC绑定的time.time,
  16. //绑定字段的顺序无关紧要。
  17. StartTime time.Time
  18. }
  19. // Get handles
  20. // 请求方法: GET
  21. // 请求路由: http://localhost:8080
  22. func (c *VisitController) Get() string {
  23. //它将“visits”值自增1,
  24. //如果“visits”这个键不存在,它将为您创建
  25. visits := c.Session.Increment("visits", 1)
  26. // write the current, updated visits.
  27. since := time.Now().Sub(c.StartTime).Seconds()
  28. return fmt.Sprintf("%d visit(s) from my current session in %0.1f seconds of server's up-time",
  29. visits, since)
  30. }
  31. func newApp() *iris.Application {
  32. app := iris.New()
  33. sess := sessions.New(sessions.Config{Cookie: "mysession_cookie_name"})
  34. visitApp := mvc.New(app.Party("/"))
  35. //将当前*session.Session绑定到`VisitController.Session`
  36. //和time.Now()到`VisitController.StartTime`。
  37. visitApp.Register(
  38. //如果依赖是一个接受Context的函数并返回一个值
  39. //然后控制器解析此函数的结果类型
  40. //并且在每个请求上它将使用Context调用该函数
  41. //并将结果(此处为* sessions.Session)设置为控制器的字段
  42. //如果没有字段或函数的输入参数,则注册依赖项
  43. //使用者然后在服务器运行之前忽略这些依赖项,
  44. //这样你就可以绑定很多dependecies并在不同的控制器中使用它们
  45. sess.Start,
  46. time.Now(),
  47. )
  48. visitApp.Handle(new(VisitController))
  49. return app
  50. }
  51. func main() {
  52. app := newApp()
  53. // 1.打开浏览器(不在私人模式下)
  54. // 2.导航到http:/localhost:8080
  55. // 3.刷新页面一些次数
  56. // 4.关闭浏览器
  57. // 5.重新打开浏览器并重新重复一次。
  58. app.Run(iris.Addr(":8080"))
  59. }

main_test.go

  1. package main
  2. import (
  3. "testing"
  4. "github.com/kataras/iris/httptest"
  5. )
  6. func TestMVCSession(t *testing.T) {
  7. e := httptest.New(t, newApp(), httptest.URL("http://example.com"))
  8. e1 := e.GET("/").Expect().Status(httptest.StatusOK)
  9. e1.Cookies().NotEmpty()
  10. e1.Body().Contains("1 visit")
  11. e.GET("/").Expect().Status(httptest.StatusOK).
  12. Body().Contains("2 visit")
  13. e.GET("/").Expect().Status(httptest.StatusOK).
  14. Body().Contains("3 visit")
  15. }