为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
holdtom 2021-12-07 10:09:01
我正在尝试使用 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
查看完整描述

2 回答

?
湖上湖

TA贡献2003条经验 获得超2个赞

当您使用 http.Error 函数时,错误消息应该是一个字符串。对于简单的测试,我建议走这条线

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

并将其更改为类似

http.Error(w,"there was an error", http.StatusInternalServerError)

看看这个回应是否通过。如果它确实很可能是您尝试在 http.Error() 中传递不是字符串的内容


查看完整回答
反对 回复 2021-12-07
?
Qyouu

TA贡献1786条经验 获得超11个赞

以下似乎允许我返回 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

        }

并不是说这是最好的方法,而是在我的情况下起作用。


查看完整回答
反对 回复 2021-12-07
  • 2 回答
  • 0 关注
  • 124 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信