Обслуживание файлов с помощью Echo
Я пытаюсь обслуживать несколько файлов с помощью Echo, но это не работает каждый раз. Код API выглядит следующим образом:
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?");
}
Чтобы быть точным, он работает для самой первой выборки файлов, но затем продолжает сбой для любых последующих вызовов (будь то выборка файлов или более "классические" вызовы). Сообщение об ошибке немного отличается для каждого браузера:
В Chrome:
SyntaxError: Не удалось выполнить setRequestHeader для XMLHttpRequest: Bearer {the_entire_content_of_the_first_fetched_file}'не является допустимым значением поля заголовка HTTP.
В Firefox:
SyntaxError: была указана неверная или недопустимая строка
В Edge просто:
Ошибка синтаксиса
Пробовал активировать CORS, ничего не изменилось.
С почтальоном выглядит неплохо. Может быть, это проблема с тем, как я получаю свои данные в моем приложении?
Если вам нужно немного больше информации, этот поток напрямую связан с моим предыдущим ( Vuejs с запросом axios в хранилище vuex: не может сделать более одного запроса, почему?), Но я не хотел смешивать их, поскольку я еще не знаю, ошибаюсь ли я в своем коде Vue или моем эхо-коде...
3 ответа
Welp, кажется, это была ошибка моего приложения все время! Мой Эхо API, кажется, хорошо... пока!
Если у кого-то есть такая же проблема, возможно, этот Vuejs с запросом axios в vuex store: не может сделать более одного запроса, почему? поможет.
Если вы хотите доставить файлы из определенного каталога. Вы можете сделать следующие способы:
e.Use(middleware.Static("/path/to/directory"))
ИЛИ ЖЕ
fs := http.FileServer(http.Dir("/path/to/directory"))
e.GET("/assets/*", echo.WrapHandler(http.StripPrefix("/assets/", fs)))
Просто добавьте CORS Middleware по умолчанию, я просто тестирую, и все работает нормально, даже если я использую домен разницы импортировать этот пакет из echo framework: "github.com/labstack/echo/middleware"
и добавьте эту конфигурацию CORS по умолчанию для вашего маршрута:
e.Use(middleware.CORSWithConfig(middleware.CORSConfig{
AllowOrigins: []string{"*"},
AllowMethods: []string{echo.GET, echo.PUT, echo.POST, echo.DELETE},
}))