溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

如何理解基于gorilla/mux 包實(shí)現(xiàn)路由匹配的處理靜態(tài)資源響應(yīng)

發(fā)布時間:2021-11-15 15:29:55 來源:億速云 閱讀:181 作者:柒染 欄目:大數(shù)據(jù)

今天就跟大家聊聊有關(guān)如何理解基于gorilla/mux 包實(shí)現(xiàn)路由匹配的處理靜態(tài)資源響應(yīng),可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。

到目前為止,我們都是在處理動態(tài)資源,也就是 Go 代碼實(shí)現(xiàn)的響應(yīng)。HTTP 服務(wù)器除了處理動態(tài)資源之外,還應(yīng)該具備處理靜態(tài)資源的能力,比如 HTML、CSS、JavaScript、圖片都屬于靜態(tài)資源的范疇。

要處理靜態(tài)資源,需要借助 PathPrefix() 方法指定靜態(tài)資源所在的路徑前綴,然后在請求處理器中通過 http.FileServer 直接返回文件內(nèi)容本身作為響應(yīng):


func main()  {    r := mux.NewRouter()    r.Use(loggingMiddleware)
   // 解析服務(wù)器啟動參數(shù) dir 作為靜態(tài)資源 Web 根目錄    // 默認(rèn)是當(dāng)前目錄 .    var dir string    flag.StringVar(&dir, "dir", ".", "靜態(tài)資源所在目錄,默認(rèn)為當(dāng)前目錄")    flag.Parse()
   // 處理形如 http://localhost:8000/static/<filename> 的靜態(tài)資源路由    r.PathPrefix("/static/").Handler(http.StripPrefix("/static/", http.FileServer(http.Dir(dir))))            // 其它路由    ...        log.Fatal(http.ListenAndServe(":8080", r))}

以上述代碼為例,當(dāng)我們請求 http://localhost:8080/static/app.js 文件時,會到 static 目錄下查找 app.js,如果找不到會返回 404,否則返回文件本身作為響應(yīng)。

我們試著在上述入口文件所在目錄下創(chuàng)建 static/app.js,并初始化代碼如下:

document.write("hello from javascript");

然后在 static 目錄下放置一張圖片 test.jpg 文件,啟動這個 HTTP 服務(wù)器:


go run mux.go -dir=static

注意這里我們通過 dir 參數(shù)指定了靜態(tài)資源的根目錄為 static,如果不指定的話訪問上述靜態(tài)資源會報 404。

接下來,就可以在瀏覽器中訪問服務(wù)器 static 目錄下的靜態(tài)資源了:

如何理解基于gorilla/mux 包實(shí)現(xiàn)路由匹配的處理靜態(tài)資源響應(yīng)

雖然 gorilla/mux 路由器提供了對靜態(tài)資源的支持,但是通常我們還是會和 PHP 一樣,基于 Nginx 來處理靜態(tài)資源,然后將動態(tài)請求轉(zhuǎn)發(fā)給 Go HTTP 服務(wù)器,因?yàn)?Nginx 作為一款強(qiáng)大的反向代理服務(wù)器,并發(fā)處理靜態(tài)資源的能力非常強(qiáng)悍,沒必要自己去處理這塊邏輯。

看完上述內(nèi)容,你們對如何理解基于gorilla/mux 包實(shí)現(xiàn)路由匹配的處理靜態(tài)資源響應(yīng)有進(jìn)一步的了解嗎?如果還想了解更多知識或者相關(guān)內(nèi)容,請關(guān)注億速云行業(yè)資訊頻道,感謝大家的支持。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI