我正在尝试使用 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() 中传递不是字符串的内容
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
}
并不是说这是最好的方法,而是在我的情况下起作用。
- 2 回答
- 0 关注
- 129 浏览
添加回答
举报
0/150
提交
取消