猿问

无法让 Go http 返回错误;'没有收到数据'

我正在尝试使用 Go 构建一个基本的 API,它使用PostgreSQL 库返回 SQL 查询的结果。


目前我可以让程序返回值,但我无法让它向用户返回失败的消息,即一些带有错误消息的 JSON。


我有一个错误函数如下:


func handleError(w http.ResponseWriter, err error) {

    if err != nil {

        log.Print(err.Error() + "\r\n") // Logging

        http.Error(w, err.Error(), http.StatusInternalServerError)

        return

    }

}

然而 http.Error 方法似乎永远不会返回任何东西。抛出的错误是数据库中不存在的表(记录到文本文件中:即 2016/01/11 23:28:19 pq:关系“building_roof”不存在


我的程序查询代码如下所示:


table := pq.QuoteIdentifier(table)

identifier := pq.QuoteIdentifier("ID")

rows, err := db.Query( fmt.Sprintf("SELECT %s, ST_AsText(geom) FROM %s WHERE %s = $1", identifier, table, identifier), feature)

handleError(w, err)

导致错误只会给出 Chrome 错误:


未收到数据


ERR_EMPTY_RESPONSE


holdtom
浏览 125回答 2
2回答

湖上湖

当您使用 http.Error 函数时,错误消息应该是一个字符串。对于简单的测试,我建议走这条线http.Error(w, err.Error(), http.StatusInternalServerError)并将其更改为类似http.Error(w,"there was an error", http.StatusInternalServerError)看看这个回应是否通过。如果它确实很可能是您尝试在 http.Error() 中传递不是字符串的内容

Qyouu

以下似乎允许我返回 JSON 错误:func handleError(w http.ResponseWriter, err string) {    type APIError struct {        Error string    }    re, _ := json.Marshal(APIError{Error: err})    io.WriteString(w, string(re))}像这样使用:rows, err := db.Query( fmt.Sprintf("SELECT %s, ST_AsText(geom) FROM %s WHERE %s = $1", identifier, table, identifier), feature)        if err != nil {            handleError(w, err.Error())            return        }并不是说这是最好的方法,而是在我的情况下起作用。
随时随地看视频慕课网APP

相关分类

Go
我要回答