首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >恐慌-没有收到数据- ERR_EMPTY_RESPONSE

恐慌-没有收到数据- ERR_EMPTY_RESPONSE
EN

Stack Overflow用户
提问于 2016-03-17 13:50:08
回答 1查看 665关注 0票数 1

我使用的是gorethink驱动程序,我在模型中编写了这样的查询函数

代码语言:javascript
复制
func GetQuotesByUser(idUser string) []Quote{
    ids:=GetQuoteIdsByUser(idUser)
    if (len(ids)>0){
        result,err:=r.Table("quote").GetAll(ids...).Run(config.Connection())
        defer result.Close()

        if err!=nil{
            fmt.Println(err)
            return []Quote{}
        }
        var quotes []Quote
        err=result.All(&quotes)
        if err!=nil{
            fmt.Println(err)
            return []Quote{}
        }
        fmt.Println(quotes)
        return quotes
    } else{
        return []Quote{}
    }
}

我编写了一个调用上述函数的路由处理程序。

代码语言:javascript
复制
import (
    "corate/util"
    "corate/model"
    "github.com/fatih/structs"
    "net/http"
)

func DashboardHandler(w http.ResponseWriter,r *http.Request){
    files:=[]string{"base","dashboard"}
    session,_:=util.GlobalSessions.SessionStart(w,r)
    defer session.SessionRelease(w)
    quotes:=model.GetQuotesByUser("ca8a2e14-f65b-43b1-b655-97d7c29190ec")
    q:=structs.Map(quotes)
    util.RenderTemplate(w,q,files...)
}

这是main函数

代码语言:javascript
复制
func main(){

    // Setup database

    config.Setupdb()

    // Initialize session manager

    util.InitSessionManager()

    // Serve static folder

    http.Handle("/public/",http.StripPrefix("/public/",http.FileServer(http.Dir("public"))))

    // Setup routers and middlewares

    http.HandleFunc("/",route.IndexHandler)
    http.HandleFunc("/login",route.GoogleLoginHandler)
    http.HandleFunc("/auth/google",route.GoogleCallbackHandler)

    http.Handle("/dashboard",negroni.New(
        negroni.HandlerFunc(route.IsAuthenticated),
        negroni.Wrap(http.HandlerFunc(route.DashboardHandler)),
    ))

    // Start listening

    http.ListenAndServe(":3000",nil)
}

我使用astaxie/beego/session库管理此服务器的会话。

代码语言:javascript
复制
import (
    "github.com/astaxie/beego/session"
)

var (
    GlobalSessions *session.Manager
)

func InitSessionManager() {
    GlobalSessions, _ = session.NewManager("memory", `{"cookieName":"gosessionid","gclifetime":3600}`)
    go GlobalSessions.GC()
}

当我启动服务器,登录并请求dashboard路径时,DashboardHandler被处理,GetQuotesByUser被调用,它工作,它工作,它打印出真正的查询结果。但是在浏览器中,浏览器抛出错误:

没有收到任何数据

ERR_EMPTY_RESPONSE

控制台也会记录一些错误。

代码语言:javascript
复制
http: panic serving 127.0.0.1:51229: not struct
goroutine 84 [running]:
net/http.(*conn).serve.func1(0xc82015fc00)
    /home/kuro/.gvm/gos/go1.6/src/net/http/server.go:1389 +0xc1
panic(0x7f58e0, 0xc8204489f0)
    /home/kuro/.gvm/gos/go1.6/src/runtime/panic.go:426 +0x4e9
github.com/fatih/structs.strctVal(0x7de700, 0xc82045a340, 0x0, 0x0, 0x0)
    /home/kuro/Workspace/Go/src/github.com/fatih/structs/structs.go:426 +0x136
github.com/fatih/structs.New(0x7de700, 0xc82045a340, 0x0)
    /home/kuro/Workspace/Go/src/github.com/fatih/structs/structs.go:30 +0x2f
github.com/fatih/structs.Map(0x7de700, 0xc82045a340, 0xc82045a340)
    /home/kuro/Workspace/Go/src/github.com/fatih/structs/structs.go:435 +0x2b
corate/route.DashboardHandler(0x7fe2c2e6dfc8, 0xc8202d49c0, 0xc820372460)
    /home/kuro/Workspace/Go/src/corate/route/user.go:19 +0x190
net/http.HandlerFunc.ServeHTTP(0xa47820, 0x7fe2c2e6dfc8, 0xc8202d49c0, 0xc820372460)
    /home/kuro/.gvm/gos/go1.6/src/net/http/server.go:1618 +0x3a
github.com/codegangsta/negroni.Wrap.func1(0x7fe2c2e6dfc8, 0xc8202d49c0, 0xc820372460, 0xc8203f0a60)
    /home/kuro/Workspace/Go/src/github.com/codegangsta/negroni/negroni.go:41 +0x50
github.com/codegangsta/negroni.HandlerFunc.ServeHTTP(0xc82012ace0, 0x7fe2c2e6dfc8, 0xc8202d49c0, 0xc820372460, 0xc8203f0a60)
    /home/kuro/Workspace/Go/src/github.com/codegangsta/negroni/negroni.go:24 +0x44
github.com/codegangsta/negroni.middleware.ServeHTTP(0x7fe2c2e6ade0, 0xc82012ace0, 0xc82012ad40, 0x7fe2c2e6dfc8, 0xc8202d49c0, 0xc820372460)
    /home/kuro/Workspace/Go/src/github.com/codegangsta/negroni/negroni.go:33 +0xaa
github.com/codegangsta/negroni.(middleware).ServeHTTP-fm(0x7fe2c2e6dfc8, 0xc8202d49c0, 0xc820372460)
    /home/kuro/Workspace/Go/src/github.com/codegangsta/negroni/negroni.go:33 +0x53
corate/route.IsAuthenticated(0x7fe2c2e6dfc8, 0xc8202d49c0, 0xc820372460, 0xc8203f0a00)
    /home/kuro/Workspace/Go/src/corate/route/isAuthenticated.go:14 +0x174
github.com/codegangsta/negroni.HandlerFunc.ServeHTTP(0xa47840, 0x7fe2c2e6dfc8, 0xc8202d49c0, 0xc820372460, 0xc8203f0a00)
    /home/kuro/Workspace/Go/src/github.com/codegangsta/negroni/negroni.go:24 +0x44
github.com/codegangsta/negroni.middleware.ServeHTTP(0x7fe2c2e6ade0, 0xa47840, 0xc82012ad20, 0x7fe2c2e6dfc8, 0xc8202d49c0, 0xc820372460)
    /home/kuro/Workspace/Go/src/github.com/codegangsta/negroni/negroni.go:33 +0xaa
github.com/codegangsta/negroni.(*Negroni).ServeHTTP(0xc8200cfe90, 0x7fe2c2e6af70, 0xc820154680, 0xc820372460)
    /home/kuro/Workspace/Go/src/github.com/codegangsta/negroni/negroni.go:73 +0x122
net/http.(*ServeMux).ServeHTTP(0xc820013740, 0x7fe2c2e6af70, 0xc820154680, 0xc820372460)
    /home/kuro/.gvm/gos/go1.6/src/net/http/server.go:1910 +0x17d
net/http.serverHandler.ServeHTTP(0xc82000e380, 0x7fe2c2e6af70, 0xc820154680, 0xc820372460)
    /home/kuro/.gvm/gos/go1.6/src/net/http/server.go:2081 +0x19e
net/http.(*conn).serve(0xc82015fc00)
    /home/kuro/.gvm/gos/go1.6/src/net/http/server.go:1472 +0xf2e
created by net/http.(*Server).Serve
    /home/kuro/.gvm/gos/go1.6/src/net/http/server.go:2137 +0x44e

为什么会发生这种事?然后我注意到,如果我不使用fatih/structs库,什么都不会出错。但是我想使用那个图书馆,它会帮我很大的忙。我想知道这种奇怪行为的原因,以及如何在使用fatih/structs库的同时修复它。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-03-17 14:46:58

GetQuotesByUser返回一个切片,而不是一个结构。所以你不能直接把它传递给structs.Map。您必须迭代这个片段,并将每个元素分别转换为一个映射。

代码语言:javascript
复制
quotes := model.GetQuotesByUser("ca8a2e14-f65b-43b1-b655-97d7c29190ec")

qs := []map[string]interface{}{}
for _, q := range quotes {
    qs = append(qs, structs.Map(q))
}

util.RenderTemplate(w,qs,files...)

应该能让你接近你想要的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36062509

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档