gpt4 book ai didi

go - 处理表单提交后提供页面时出现空白页面或运行时错误

转载 作者:数据小太阳 更新时间:2023-10-29 03:37:45 24 4
gpt4 key购买 nike

我能够加载一个 html 页面 ( index.html ) 谁是 <body></body>内容如下所示:

<form action="ask" method="get">
<input type="text" name="q" />
</form>

我正在尝试的是呈现 index.html,然后在提交请求时呈现 index.html 的副本,除了一些内容来 self 的 golang 代码作为结果页面。

当我在 index.html 中提交表单时,我得到一个空白页面。

但是当转到 localhost:8000/view 或时我没有收到任何数据localhost:8000/view?q=hello+world 在浏览器中。在终端中,我得到了这个以及更多,但这是第一行:

http: panic serving [::1]:53803: runtime error: invalid memory address or nil pointer dereference

这是什么意思,我该如何解决?

当我转到/ask 或/ask?q=hello+world 时,这是我想要做的,我得到了没有错误的空白页面。

我正在尝试处理加载的初始页面和提交请求表单后的结果页面上的请求。

index.html、view.html 和 edit.html 都有这个:

<form method="get" action="ask">

<input type="text" name="q" />

</form>

现在这是我的代码:

package main

import (

"fmt"
"net/http"
"github.com/zenazn/goji"
"github.com/zenazn/goji/web"

"html/template"
"io/ioutil"
)

type Page struct {

Title string

Body []byte

}

func (p *Page) save() error{

filename := p.Title + ".txt"

return ioutil.WriteFile(filename, p.Body, 0600)

}

func loadPage(title string) (*Page, error){

filename := title + ".txt"

body, err := ioutil.ReadFile(filename)

if err != nil{

return nil, err

}

return &Page{Title: title, Body: body}, nil

}

func renderTemplate(w http.ResponseWriter, tmpl string, p *Page){

t, err := template.ParseFiles(tmpl + ".html")

if err != nil{
fmt.Println(err)
}
t.Execute(w, p)

}

func viewHandler(w http.ResponseWriter, r *http.Request){

//title := r.URL.Path[len("/view/"):]

title := r.FormValue("q")

p, err := loadPage(title)

if err != nil{
fmt.Println(err)
}

renderTemplate(w, "view", p)

}

func editHandler(w http.ResponseWriter, r *http.Request){

//title := r.URL.Path[len("/edit/"):]

title := r.FormValue("q")

p, err := loadPage(title)

if err != nil{

p = &Page{Title: title}
fmt.Println(err)

}

renderTemplate(w, "edit", p)

}

func response(c web.C, w http.ResponseWriter, r *http.Request){

}

func serveSingle(filename string) func(w http.ResponseWriter, r *http.Request) {

return func(w http.ResponseWriter, r *http.Request) {

http.ServeFile(w, r, filename)

}

}

func main() {

goji.Get("/", serveSingle("Projects/Go/src/web/site/index.html"))

goji.Handle("/ask", response)

http.HandleFunc("/view/", viewHandler)

http.HandleFunc("/edit/", editHandler)

goji.Serve()

}

所以我想处理来自 index.html 和结果页面的询问并运行响应,这将在提交来自 index.html 和结果页面的询问表单时呈现结果页面。

最佳答案

使用正确的错误处理,您应该会看到发生了什么。由于某种原因,它要么正在加载一个空白文件,要么无法找到该文件,这就是结果页面为空白的原因。

如评论中所述:

在 renderTemplate 中,执行 panic(err) 并检查 t.Execute() 的返回值。在 viewHandler 中也执行 panic(err)。同样在 editHandler 中,执行 panic(err)

看看那些 panic 怎么说,然后从那里开始。

关于go - 处理表单提交后提供页面时出现空白页面或运行时错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25475003/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com