- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我正在尝试使用 Go 构建一个基本 API,它使用 PostgreSQL library 返回 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
编辑完整代码:
package main
import (
"fmt"
"encoding/json"
"os"
"log"
"net/http"
"database/sql"
"strings"
"time"
"github.com/lib/pq"
)
func handler(w http.ResponseWriter, r *http.Request) {
f, err := os.OpenFile("pgdump_errorlog.txt", os.O_RDWR | os.O_CREATE | os.O_APPEND, 0666)
log.Print("Couldn't open file")
defer f.Close()
log.SetOutput(f)
// Timing
start := time.Now()
// Postgres Credentials
const (
DB_USER = "postgres"
DB_PASSWORD = "OMITTED" // Removed details !
DB_PORT = "OMITTED"
DB_NAME = "OMITTED"
)
// Postgres Connect
dbinfo := fmt.Sprintf("user=%s password=%s dbname=%s port=%s sslmode=disable",
DB_USER, DB_PASSWORD, DB_NAME, DB_PORT)
db, err := sql.Open("postgres", dbinfo)
handleError(w, err)
defer db.Close()
table := r.FormValue("table")
feature := r.FormValue("id")
if table != "" {
//Postgres Query
var (
id int
geom string
)
table := pq.QuoteIdentifier(table)
identifier := pq.QuoteIdentifier("ID")
rows, qerr := db.Query( fmt.Sprintf("SELECT %s, ST_AsText(geom) FROM %s WHERE %s = $1", identifier, table, identifier), feature)
handleError(w, err)
defer rows.Close()
for rows.Next() {
err := rows.Scan(&id, &geom)
handleError(w, err)
}
err = rows.Err()
handleError(w, err)
// Maniplate Strings
returngeom := strings.Replace(geom, "1.#QNAN", "", -1)
i := strings.Index(returngeom, "(")
wkt := strings.TrimSpace(returngeom[:i])
returngeom = returngeom[i:]
type WTKJSON struct {
WTKType string
Geometry string
Elapsed time.Duration
}
returnjson := WTKJSON{Geometry: returngeom, WTKType: wkt , Elapsed: time.Since(start)/1000000.0}
json.NewEncoder(w).Encode(returnjson)
}
}
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
}
}
func main() {
http.HandleFunc("/", handler)
http.ListenAndServe(":8080", nil)
}
最佳答案
以下似乎允许我返回 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
}
并不是说这是最好的方法,但对我来说很有效。
关于postgresql - 无法获取 Go http 返回错误; 'No data recieved',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34733120/
已关闭。此问题需要 debugging details 。目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and the
我想开发一个允许用户通过 Firebase 消息传递相互交互的应用程序,但问题是: 教程和开源项目只能在 Activity 运行时使用:例如,This GitHub Project和 This Sta
我正在努力制作我的基本锁屏应用程序。开始时,该应用程序显示一个基本 Activity 屏幕,带有一个 ImageView (显示存储中的图像)和一个 TextView(显示日期和时间)。向上滑动时,
本帖有更新,看第一个回答 所以,首先,我确实搜索了类似的问题(并找到了一些线程),但没有解决我的问题。我是第一次尝试使用 quasar 框架,也许我在命名空间的某个地方迷路了。 所以,首先,一些信息:
我正在尝试编写一个接收JSON数据的API,我能够接收数据,但不确定如何读取或提取其内容。我的代码行是:。我发送了cURL命令cURL-X POST http://127.0.0.1:8000/pos
我试图通过套接字发送帧,并且在编码后通常是50 000-80 000字节,所以我按循环接收数据,但是由于客户端始终发送帧,因此以下代码中的循环始终不会中断,因此当我运行时什么也没有发生,并且接收循环继
我正在使用 AngularJS,我正在尝试将 json 从我的服务发送到 webAPI Controller 。当我通过发送时,我在 webApi 函数的参数中收到 null。 我的功能服务是: an
我正在使用 C++ 和弯路处理 Hook winsock2 函数的 dll。我的目标是修改进出原始可执行文件的 TCP 流量。在某些时候,我需要停止某些数据包的传递(这样原始可执行文件根本不知道该数据
我正在用 C 语言制作一个简单的 TCP 客户端-服务器,我正在尝试从客户端向服务器发送消息,但我遇到了一些问题。服务器确实发送消息(整数值 > 0)但客户端无法接收它(整数值 > 0)这是代码:客户
在 Apple 的 ObjC 运行时指南中,它描述了 objc_msgSend() 函数对动态调度的作用: It first finds the procedure (method implement
以下代码是一个旨在发送 ICMP 回显请求和接收回复的程序。 /* Forgive my lack of error handling :) */ SOCKET ASOCKET = INVAL
我是这个网站的新手,也是 Android 新手。我正在尝试为 TCP 客户端编写代码。我也可以发送数据并接收数据。我想从 in 缓冲区中读取数据,我可以使用 in.readLine(); ,但这只会读
我做了一个python服务器和一个java客户端。我的问题很简单:服务器收到客户端的消息,但客户端没有得到回复。 Java 客户端: package fgd; import java.io.DataI
我似乎在通过连接表接收产品时遇到问题,这给了我一个奇怪的错误,因为它似乎没有收到我的订单的 ID。我只能假设这是因为订单尚未创建,但无论如何我都会在此步骤中创建订单,因此订单还没有 ID。所以这就是我
我问这个问题是因为我不明白我搜索的问题所提供的解释,所以这个问题可能很常见。我使用另一个人的代码来尝试了解它是如何工作的,以便复制它。在可注入(inject)的方法之一中,原作者返回一个 promis
我有 C 语言的客户端/服务器程序,通过它我可以将文件从服务器传输到客户端。 但客户端甚至在收到文件的最后一个字节后仍在等待 recv。只有当我杀死它或服务器被我杀死时,客户端才会终止。但是服务器必须
在 WPF 4.0 中,如果我在加载用户控件后在窗口中交换用户控件,我似乎无法使用任何键盘快捷键。一个代码示例说了一千个字,所以这就是我正在做的: Window window = new Window
我一直无法找到 oracle.net.ns.Packet.recieve() 方法的文档。此方法仅在选择查询时调用吗?或者它是否也在插入更新等时被调用? 我的应用程序大部分时间都花在了这个方法上。我可
我正在尝试从移动应用程序(用 React Native 编写,现在在 iOS 上运行)上传图像文件。 文件被发送到我的 REST API,如下所示。我遇到了两个问题: 我没有得到 req.body,因
我正在尝试使用 Go 构建一个基本 API,它使用 PostgreSQL library 返回 SQL 查询的结果。 . 目前我可以让程序返回值,但我无法让它向用户返回失败的消息,即一些带有错误消息的
我是一名优秀的程序员,十分优秀!