示例#1
0
//compiles jsx on the fly
func (s *Staticjsx) ServeHTTP(c *gin.Context) {
	if c.Request.Method != "GET" && c.Request.Method != "HEAD" {
		c.Next()
		return
	}

	result, ok := s.jsxCache[c.Request.URL.Path]
	if !ok {

		file := filepath.Join(s.Dir, c.Request.URL.Path)
		if filepath.Ext(file) != ".jsx" {
			c.Next()
			return
		}

		fd, err := os.Open(file)
		if err != nil {
			c.Next()
			return
		}
		defer fd.Close()

		gen, err := generator.ParseAndGenerate(fd)
		if err != nil {
			log.Println(err)
			c.Next()
			return
		}
		if gen == nil {
			c.Next()
			return
		}
		buf := new(bytes.Buffer)
		buf.ReadFrom(gen)
		result = buf.Bytes()

		if s.EnableCaching {
			s.jsxCache[c.Request.URL.Path] = result
		}
	}

	//serve compiled js
	c.Data(200, "text/javascript", result)
}