2016-04-09 51 views
1

我正在使用Angular 2和Go構建單頁應用程序,而在Angular中,我使用了路由。如果我打開的,比方說,http://example.com/網站,Go會爲我服務我index.html文件,因爲我寫了這個,這是很好:如果URL與Go中的任何模式都不匹配,如何提供文件?

mux.Handle("/", http.FileServer(http.Dir(mysiteRoot))) 

現在我有角的路線,讓我們說,/posts,並且如果它是一個默認路由(即useAsDefaulttrue)或者我只是手動去http://example.com/posts,我會從Go得到一個404錯誤,這意味着沒有爲這個路徑指定處理程序。

我不認爲在Go中爲每條Angular路線創建一個處理程序是一個好主意,因爲可能有很多路線。所以我的問題是,如果請求URL與我在我的ServeMux中設置的任何其他模式不匹配,我如何在Go中服務index.html

回答

1

那麼,這實際上很容易。 的net/http文檔says這一點:

應當注意,由於斜線的名字有根樹結尾的模式, 模式「/」的所有路徑匹配不被其他註冊 模式匹配,而不只是與路徑的URL ==「/」。

所以我需要對我的"/"處理程序進行一些操作。 http.FileServer將查找在模式字符串指定目錄中的文件,所以我只是用這個替代它:

mux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { 
    http.ServeFile(w, r, mysiteRoot + "index.html") 
}) 

,它工作得很好。

0

我認爲您需要更改angular2應用程序中的URL提供程序設置才能使用HashLocationStrategy。用這種方法,你的路線將是形式的

#/職位

,並不會觸發您的golang應用程序的任何途徑。

相關問題