0

我正在尝试使用 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:无法在“XMLHttpRequest”上执行“setRequestHeader”:“Bearer {the_entire_content_of_the_first_fetched_file}”不是有效的 HTTP 标头字段值。

在火狐中:

SyntaxError:指定了无效或非法的字符串

在 Edge 中,简单地说:

语法错误

尝试激活 CORS,没有任何改变。

看起来与 Postman 配合得很好。也许这是我如何在我的应用程序中获取数据的问题?

如果您可能需要更多信息,此线程与我之前的线程直接相关(Vuejs with axios request in vuex store: can't make more than one request, why?),但我不想混淆它们,因为我还不知道我是在我的 Vue 代码还是我的 Echo 代码中弄错了......

4

3 回答 3

4

如果您想从某个目录传送文件。您可以通过以下方式进行:

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

或者

fs := http.FileServer(http.Dir("/path/to/directory"))
e.GET("/assets/*", echo.WrapHandler(http.StripPrefix("/assets/", fs)))
于 2017-08-08T03:44:01.640 回答
0

只需添加默认的 CORS 中间件,我只是测试,即使我使用不同的域它也能正常工作。从 echo 框架导入这个包:"github.com/labstack/echo/middleware" 并在你的路由之前添加这个默认的 CORS 配置:

e.Use(middleware.CORSWithConfig(middleware.CORSConfig{
    AllowOrigins: []string{"*"},
    AllowMethods: []string{echo.GET, echo.PUT, echo.POST, echo.DELETE},
}))
于 2017-08-08T05:14:39.837 回答
-1

Welp,看来这一直是我的应用程序的错!我的 Echo api 看起来还不错……现在!

如果有人有同样的问题,也许这个Vuejs with axios request in vuex store: can't make more than one request,为什么?会有所帮助。

于 2017-08-08T06:51:21.253 回答