html - 在 HTML 文件中呈现 GET 请求响应

标签 html http go rendering

我刚开始学习 Go 中的 REST API,我不知道如何在我的 HTML 文件中显示 GET 请求的响应。 我基本上所做的是创建一个函数 GetCurrency(),它从第三方 API 获取数据。现在我正在尝试在 HTML 文件中呈现响应 Currency 但我似乎没有得到它,因为每当本地主机加载 /getcurrency 我得到一个空白页面尽管我的 .gohtml 文件包含一个表单。

这是我在 main.go 文件中的结构

type pageData struct {
    Title    string
    Currency string
}

这是我在 main.go 文件中的主要功能

func main() {
    http.HandleFunc("/", home)
    http.HandleFunc("/home", home)
    http.HandleFunc("/getcurrency", getCurrency)
    http.ListenAndServe(":5050", nil)
}

这里是我的 home 函数,在该函数中执行 HTML

func home(w http.ResponseWriter, req *http.Request) {

    pd := pageData{
        Title: "Etmazec Home Page",
    }

    err := tpl.ExecuteTemplate(w, "homepage.gohtml", pd)
    if err != nil {
        log.Println(err)
        http.Error(w, "Internal server error", http.StatusInternalServerError)
    }
}

这是我在 main.go 文件中的 getCurrency() 函数

func getCurrency(w http.ResponseWriter, req *http.Request) {
    pd := pageData{
        Title: "Welcome to the exchange rate website",
    }
    err := tpl.ExecuteTemplate(w, "currency.gohtml", pd)
    response, err := http.Get("https://api.coinbase.com/v2/prices/spot?currency=USD")

    if err != nil {
        fmt.Printf("The http requst failed with error %s \n", err)
    } else {
        data, _ := ioutil.ReadAll(response.Body)
        pd.Currency = string(data)
        fmt.Println(string(data))
    }
}

最后,这是我的currency.gohtml正文

<body>
    <h1>TOP HITS</h1>
    <nav>
        <ul>
            <li><a href="/home">HOME PAGE</a>
        </ul>
    </nav>
    <form action="/getcurrency" method="GET">
        <label for="fname">Your Name</label>
        <input type="text" name="fname">
        <input type="submit">
    </form>
    {{.Currency}}
      </body>

这是我的home.gohtml 文件

 <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <link rel="stylesheet" href="/public/css/main.css">
    <body>

    </body>
    </html>

    <h1>Currency HomePage</h1>

    <nav>
        <ul>
            <li><a href="/home">HOME PAGE</a>
            <li><a href="/getcurrency">The Currency</a>
        </ul>
    </nav>

最佳答案

fmt.Println(string(data)) 来自 func getCurrency() 打印到标准输出。因此,您会在应用程序控制台中看到生成的 HTML,但它不会返回到浏览器。

https://golang.org/pkg/fmt/#Println :

Println formats using the default formats for its operands and writes to standard output.

您需要将字节发送到 w http.ResponseWriter 处理程序参数:

fmt.Fprintln(w, string(data))

https://golang.org/pkg/fmt/#Fprintln

关于html - 在 HTML 文件中呈现 GET 请求响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53573062/

相关文章:

html - 在页面中心对齐导航栏

html - 如何使 div 与 glyphicon 内容高度相同?

jquery - Javascript 从谷歌获取建筑物的图像

google-app-engine - Google App Engine Algolia 索引错误

javascript - 如何在 Angular 中更改之前/之后的样式?

javascript - 仅从网页请求元标记

http - 用于指示 OpenID Connect 服务器位置的标准 HTTP header ?

c# - C# (.net) 下带有 HTTP 服务器的 Keep-Alive 套接字如何发送多个查询?

xml - 如何使用 xml golang std 查找已知属性和 token 的值。库

go - 以下哪项是进行错误处理的正确方法