草庐IT

http - panic - 没有收到数据 - ERR_EMPTY_RESPONSE

coder 2023-07-01 原文

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

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{}
    }
}

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

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...)
}

这是主要函数

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 库来管理此服务器的 session

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

控制台也会记录一些错误

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 库的同时修复它

最佳答案

GetQuotesByUser 返回一个 slice ,而不是一个结构。所以你不能将它直接传递给structs.Map。您必须迭代 slice 并将每个元素单独转换为 map 。

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...)

应该让你接近你所追求的。

关于http - panic - 没有收到数据 - ERR_EMPTY_RESPONSE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36062509/

有关http - panic - 没有收到数据 - ERR_EMPTY_RESPONSE的更多相关文章

  1. ruby - 解析 RDFa、微数据等的最佳方式是什么,使用统一的模式/词汇(例如 schema.org)存储和显示信息 - 2

    我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i

  2. ruby - 难道Lua没有和Ruby的method_missing相媲美的东西吗? - 2

    我好像记得Lua有类似Ruby的method_missing的东西。还是我记错了? 最佳答案 表的metatable的__index和__newindex可以用于与Ruby的method_missing相同的效果。 关于ruby-难道Lua没有和Ruby的method_missing相媲美的东西吗?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/7732154/

  3. ruby-on-rails - rails 目前在重启后没有安装 - 2

    我有一个奇怪的问题:我在rvm上安装了ruby​​onrails。一切正常,我可以创建项目。但是在我输入“railsnew”时重新启动后,我有“程序'rails'当前未安装。”。SystemUbuntu12.04ruby-v"1.9.3p194"gemlistactionmailer(3.2.5)actionpack(3.2.5)activemodel(3.2.5)activerecord(3.2.5)activeresource(3.2.5)activesupport(3.2.5)arel(3.0.2)builder(3.0.0)bundler(1.1.4)coffee-rails(

  4. ruby - 如何模拟 Net::HTTP::Post? - 2

    是的,我知道最好使用webmock,但我想知道如何在RSpec中模拟此方法:defmethod_to_testurl=URI.parseurireq=Net::HTTP::Post.newurl.pathres=Net::HTTP.start(url.host,url.port)do|http|http.requestreq,foo:1endresend这是RSpec:let(:uri){'http://example.com'}specify'HTTPcall'dohttp=mock:httpNet::HTTP.stub!(:start).and_yieldhttphttp.shou

  5. ruby - 在没有 sass 引擎的情况下使用 sass 颜色函数 - 2

    我想在一个没有Sass引擎的类中使用Sass颜色函数。我已经在项目中使用了sassgem,所以我认为搭载会像以下一样简单:classRectangleincludeSass::Script::FunctionsdefcolorSass::Script::Color.new([0x82,0x39,0x06])enddefrender#hamlengineexecutedwithcontextofself#sothatwithintemlateicouldcall#%stop{offset:'0%',stop:{color:lighten(color)}}endend更新:参见上面的#re

  6. ruby - Ruby 有 `Pair` 数据类型吗? - 2

    有时我需要处理键/值数据。我不喜欢使用数组,因为它们在大小上没有限制(很容易不小心添加超过2个项目,而且您最终需要稍后验证大小)。此外,0和1的索引变成了魔数(MagicNumber),并且在传达含义方面做得很差(“当我说0时,我的意思是head...”)。散列也不合适,因为可能会不小心添加额外的条目。我写了下面的类来解决这个问题:classPairattr_accessor:head,:taildefinitialize(h,t)@head,@tail=h,tendend它工作得很好并且解决了问题,但我很想知道:Ruby标准库是否已经带有这样一个类? 最佳

  7. 没有类的 Ruby 方法? - 2

    大家好!我想知道Ruby中未使用语法ClassName.method_name调用的方法是如何工作的。我头脑中的一些是puts、print、gets、chomp。可以在不使用点运算符的情况下调用这些方法。为什么是这样?他们来自哪里?我怎样才能看到这些方法的完整列表? 最佳答案 Kernel中的所有方法都可用于Object类的所有对象或从Object派生的任何类。您可以使用Kernel.instance_methods列出它们。 关于没有类的Ruby方法?,我们在StackOverflow

  8. ruby - Net::HTTP 获取源代码和状态 - 2

    我目前正在使用以下方法获取页面的源代码:Net::HTTP.get(URI.parse(page.url))我还想获取HTTP状态,而无需发出第二个请求。有没有办法用另一种方法做到这一点?我一直在查看文档,但似乎找不到我要找的东西。 最佳答案 在我看来,除非您需要一些真正的低级访问或控制,否则最好使用Ruby的内置Open::URI模块:require'open-uri'io=open('http://www.example.org/')#=>#body=io.read[0,50]#=>"["200","OK"]io.base_ur

  9. ruby-on-rails - 我更新了 ruby​​ gems,现在到处都收到解析树错误和弃用警告! - 2

    简而言之错误:NOTE:Gem::SourceIndex#add_specisdeprecated,useSpecification.add_spec.Itwillberemovedonorafter2011-11-01.Gem::SourceIndex#add_speccalledfrom/opt/local/lib/ruby/site_ruby/1.8/rubygems/source_index.rb:91./opt/local/lib/ruby/gems/1.8/gems/rails-2.3.8/lib/rails/gem_dependency.rb:275:in`==':und

  10. ruby-on-rails - Rails 3,嵌套资源,没有路由匹配 [PUT] - 2

    我真的为这个而疯狂。我一直在搜索答案并尝试我找到的所有内容,包括相关问题和stackoverflow上的答案,但仍然无法正常工作。我正在使用嵌套资源,但无法使表单正常工作。我总是遇到错误,例如没有路线匹配[PUT]"/galleries/1/photos"表格在这里:/galleries/1/photos/1/edit路线.rbresources:galleriesdoresources:photosendresources:galleriesresources:photos照片Controller.rbdefnew@gallery=Gallery.find(params[:galle

随机推荐