2014-07-20 4 views
4

저는 Angularjs 프론트 엔드를 서비스하기 위해 Go 백엔드를 시도하는 새로운 Gopher이며 API도 제공합니다.Go + 각도 ui-router

이것은 내가 지금까지 가지고있는 것입니다.

package main 

import (
    "github.com/gorilla/mux" 
    "log" 
    "net/http" 
) 

func main() { 
    rtr := mux.NewRouter() 
    srtr := rtr.PathPrefix("/api").Subrouter() 
    srtr.HandleFunc("/hello", hello).Methods("GET") 
    rtr.PathPrefix("/").Handler(http.FileServer(http.Dir("./static/"))) 

    http.Handle("/", rtr) 

    log.Println("Listening...") 
    http.ListenAndServe(":3000", nil) 
} 

func hello(w http.ResponseWriter, r *http.Request) { 
    w.Write([]byte("Hello World")) 
} 

모든 것이 정상적으로 작동합니다. /api/hello "Hello World"가 반환되고 /으로 가면 index.html이됩니다. 그러나 각도 ui-router를 사용하려고하므로 모든 등록되지 않은 경로를 각도로 전송하여 각도 ui-router가 처리 할 수 ​​있도록 go 서버가 필요합니다.

예 : 지금 /random으로 가면 임의 번호가 ./static 인 파일이 없으므로 404가 반환됩니다. 하지만 내가 원하는 것은 Angular에 요청을 전달하여 ui-router가 처리 할 수 ​​있습니다. /random

+2

gorilla/mux 문서에 따라 맞춤 404 처리기를 설정할 수 있습니다. http://www.gorillatoolkit.org/pkg/mux#Router - 귀하의 경우에는 모든 항목을 직접 지정하도록 설정할 수 있습니다. -'/'또는 유사한 경로 (즉, http.Redi rect (w, r, "/", 302)') – elithrar

답변

3

라우터에서 정의되지 않은 다른 모든 URL에 index.html을 제공해야합니다. 먹스 패키지에 도움이 핸들러가 : - :

func main() { 
    r := mux.NewRouter() 
    r.HandleFunc("/foo", fooHandler) 
    r.NotFoundHandler = http.HandlerFunc(notFound) 
    http.Handle("/", r) 

} 

및 NOTFOUND 기능 정의 : http://www.gorillatoolkit.org/pkg/mux#Router NotFoundHandler

볼 는 당신은 모든 404의를 처리하기 위해, 그것을 사용할 수 있습니다

은 index.html을 대신 제공

func notFound(w http.ResponseWriter, r *http.Request) { 
    http.ServeFile(w, r, "static/index.html") 
}