【问题标题】:Serving files with Echo使用 Echo 提供文件
【发布时间】:2023-04-05 07:37:01
【问题描述】:

我正在尝试使用 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 中:

语法错误:无法对“XMLHttpRequest”执行“setRequestHeader”:“Bearer {the_entire_content_of_the_first_fetched_file}”不是有效的 HTTP 标头字段值。

在 Firefox 中:

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

在 Edge 中,简单地说:

语法错误

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

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

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

【问题讨论】:

    标签: go go-echo


    【解决方案1】:

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

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

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

    【讨论】:

    • 尝试了这些,它们不是冗长的替代方案,但它们的行为与我描述的完全相同:在 Postman 中工作,在我的应用程序中工作真的很奇怪。
    • 好的,您能否针对您在问题中提到的问题创建一个工作应用程序并分享一个 github 链接?很难弄清楚你最后发生了什么。通常在服务器端,每个请求都会得到服务。这不像第一次和随后的失败。这可能是您面临的其他问题。
    【解决方案2】:

    只需添加默认的 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},
    }))
    

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-05-10
        • 2011-08-01
        • 2020-09-25
        • 1970-01-01
        • 2017-10-09
        • 2015-08-25
        • 2016-05-04
        • 2021-07-29
        相关资源
        最近更新 更多