2017-08-08 121 views
0

我試圖用Echo提供多個文件,但每次都不起作用。 的API代碼如下所示:用Echo提供文件(Golang)

package main 

import (
    "github.com/labstack/echo" 

    "net/http" 
) 

func main() { 
    e := echo.New(); 

    e.GET("/", home); 

    e.File("/data1", "assets/data1.csv"); 

    e.File("/data2", "assets/data2.csv"); 

    e.Logger.Fatal(e.Start(":4243")); 
} 

func home(c echo.Context) error { 
    return c.String(http.StatusOK, "Are you lost?"); 
} 

準確地說,它的工作的第一個文件抓取,但後來一直沒有任何後續調用(被它們文件取或更多的「經典」的電話)。該錯誤消息是爲每個瀏覽器一點點不同:

在鉻:

SyntaxError: Failed to execute 'setRequestHeader' on 'XMLHttpRequest': 'Bearer {the_entire_content_of_the_first_fetched_file}' is not a valid HTTP header field value.

在Firefox:

SyntaxError: An invalid or illegal string was specified

在邊沿,只需:

SyntaxError

嘗試激活CORS , 沒有改變。

看起來很適合郵遞員。在我的應用程序中如何獲取我的數據可能是一個問題?

如果你需要更多的信息,這個線程直接關係到我的前一個(Vuejs with axios request in vuex store: can't make more than one request, why?),但我不想把它們混合起來,因爲我不知道我是否被誤認爲我的Vue代碼或我的回聲...

回答

0

如果您想從特定目錄傳送文件。你可以做以下幾種方式:

e.Use(middleware.Static("/path/to/directory")) 

OR

fs := http.FileServer(http.Dir("/path/to/directory")) 
e.GET("/assets/*", echo.WrapHandler(http.StripPrefix("/assets/", fs))) 
+0

試過這些,他們不是那麼冗長的選擇,但是他們的行爲與我所描述的完全一樣:郵遞員的工作,在我的應用程序中真的很奇怪。 –

+0

好的,你可以用你在問題中提到的問題創建一個工作應用程序,並共享一個github鏈接?很難弄清楚你最後發生了什麼。通常在服務器端,每個請求都得到服務。它不是像第一個和後來的失敗。這可能是您面臨的其他問題。 – jeevatkm

0

只需添加默認CORS中間件,我只是測試,它甚至我用差異域是做工精細。 導入這個包沒有回聲框架:"github.com/labstack/echo/middleware" 並添加此默認配置CORS您befor路線:

e.Use(middleware.CORSWithConfig(middleware.CORSConfig{ 
    AllowOrigins: []string{"*"}, 
    AllowMethods: []string{echo.GET, echo.PUT, echo.POST, echo.DELETE}, 
}))