瀏覽代碼

Fixes new NoRoute() logic

Manu Mtz-Almeida 11 年之前
父節點
當前提交
d0fb4a6bf0
共有 1 個文件被更改,包括 13 次插入6 次删除
  1. 13 6
      gin.go

+ 13 - 6
gin.go

@@ -35,15 +35,16 @@ type (
 	// Represents the web framework, it wraps the blazing fast httprouter multiplexer and a list of global middlewares.
 	Engine struct {
 		*RouterGroup
-		HTMLRender  render.Render
-		cache       sync.Pool
-		handlers404 []HandlerFunc
-		router      *httprouter.Router
+		HTMLRender   render.Render
+		cache        sync.Pool
+		finalNoRoute []HandlerFunc
+		noRoute      []HandlerFunc
+		router       *httprouter.Router
 	}
 )
 
 func (engine *Engine) handle404(w http.ResponseWriter, req *http.Request) {
-	c := engine.createContext(w, req, nil, engine.handlers404)
+	c := engine.createContext(w, req, nil, engine.finalNoRoute)
 	c.Writer.setStatus(404)
 	c.Next()
 	if !c.Writer.Written() {
@@ -92,7 +93,13 @@ func (engine *Engine) SetHTMLTemplate(templ *template.Template) {
 
 // Adds handlers for NoRoute. It return a 404 code by default.
 func (engine *Engine) NoRoute(handlers ...HandlerFunc) {
-	engine.handlers404 = engine.combineHandlers(handlers)
+	engine.noRoute = handlers
+	engine.finalNoRoute = engine.combineHandlers(engine.noRoute)
+}
+
+func (engine *Engine) Use(middlewares ...HandlerFunc) {
+	engine.RouterGroup.Use(middlewares...)
+	engine.finalNoRoute = engine.combineHandlers(engine.noRoute)
 }
 
 // ServeHTTP makes the router implement the http.Handler interface.