我有一个 GoLang 脚本,用于根据浏览器中的输入查询动态构建网页,如下所示http://localhost:8000/blog/post#,该post#部分用于识别要解析到我创建的 HTML 模板中的 JSON 数据文件;例如,如果我把它从我的文件中http://localhost:8000/blog/post1创建一个文件。目前,我的脚本在运行时允许我在浏览器中加载单个页面,然后它退出并在我的终端标准输出日志中显示错误:index.htmlpost1.json
2022/03/18 00:32:02 error: open jsofun.css.json: no such file or directory
exit status 1
这是我当前的脚本:
package main
import (
"encoding/json"
"html/template"
"io/ioutil"
"log"
"net/http"
"os"
)
func blogHandler(w http.ResponseWriter, r *http.Request) {
blogstr := r.URL.Path[len("/blog/"):]
blogstr = blogstr + ".json"
// read the file in locally
json_file, err := ioutil.ReadFile(blogstr)
if err != nil {
log.Fatal("error: ", err)
}
// define a data structure
type BlogPost struct {
// In order to see these elements later, these fields must be exported
// this means capitalized naming and the json field identified at the end
Title string `json:"title"`
Timestamp string `json:"timestamp"`
Main string `json:"main"`
ContentInfo string `json:"content_info"`
}
// json data
var obj BlogPost
err = json.Unmarshal(json_file, &obj)
if err != nil {
log.Fatal("error: ", err)
}
tmpl, err := template.ParseFiles("./blogtemplate.html")
HTMLfile, err := os.Create("index.html")
if err != nil {
log.Fatal(err)
}
defer HTMLfile.Close()
tmpl.Execute(HTMLfile, obj)
http.ServeFile(w, r, "./index.html")
}
func main() {
http.HandleFunc("/blog/", blogHandler)
log.Fatal(http.ListenAndServe(":8080", nil))
}
我已经完成了一些基本的调试,并确定问题出在以下几行:
json_file, err := ioutil.ReadFile(blogstr)
if err != nil {
log.Fatal("error: ", err)
}
令我困惑的是为什么 ioutil.ReadFile 也试图读取我的 HTML 中链接的文件?浏览器不应该处理该链接而不是我的处理程序吗?作为参考,这是我jsofun.css链接文件的 HTML;我的控制台输出中引用的错误显示我的脚本jsofun.css.json在调用期间尝试访问此文件ioutil.ReadFile:
繁星coding
呼唤远方
相关分类