Open CarsonSlovoka opened 2 years ago
router的其中一環,當訪問某一個URL的時候,要怎麼樣取得Server的資源 (也就是訪問server的端的檔案)
他的最簡單的做法像這樣
但這樣做的缺點:
所以比較好的方式是建立一個比較正規的Fileserver來幫忙
fileserver要考量的有兩點,要可以支持embed和直接讀取檔案,所以我們會給他http.FileSystem來當作參數
他的用法
前面都是在為Open和Read做鋪墊,在接下來因為http.Handler需要ServeHTTP的方法,所以要實作它
以上代碼只是最URL的路徑稍微調整一下罷了,
而serveFile主要做的就是考量訪問的是資料夾還是index.html之類的罷了,另外如果是資料夾會在地回呼叫自己(要確認是否有index.html存在),最後有個localRedirect 它可以在當前您的路徑回傳相對路徑給server
最後呼叫serveContent
這個東西其實不好寫,關於content-type有現成的東西用,另外有兩個東西很棘手
修改網址其實只要改r.URL.Path即可讓使用者看到修改過的網址
所有的url後面記得補上\
不然會跑到
這段的代碼其實沒有測試過
目前已知如果刻意把最後的\
移除,就會進入,然後相對路徑會導致結果不正確。
比較奇怪的是在結束程式之後,localhost的路徑可能不會還原,
例如輸入 localhost:8080/helloWorld/
他可能會幫你導向 localhost:8080/helloWorld/hello-world
您需要把cookie和一些瀏覽紀錄刪除之後,連結的網址導向才會正確。
否則你的程式即便是對的,他也會導向其他的網址,造成你以為自己是錯的假象
如果要停用shutdownURL只需要給空白即可
由於有越來越多config要填寫,所以把config移到單獨的package去
還是有辦法讓app讀取到他,只需在app宣告他的變數,然後載入它即可。
待辦事項