update `launch.json` create lute parse and render private options add some style to `index.tmpl` merge template and lute function read options from config file
79 lines
1.8 KiB
Go
79 lines
1.8 KiB
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"html/template"
|
|
"log"
|
|
"net/http"
|
|
"os"
|
|
|
|
"github.com/88250/lute"
|
|
"gopkg.in/yaml.v3"
|
|
)
|
|
|
|
type BlogData struct {
|
|
Title string `yaml:"Title"`
|
|
Author string `yaml:"Author"`
|
|
Content template.HTML `yaml:"Content"`
|
|
}
|
|
|
|
func LoadYAML(pathToFile string, out interface{}) error {
|
|
file, err := os.ReadFile(pathToFile)
|
|
if err != nil {
|
|
return fmt.Errorf("读取文件失败: %w", err)
|
|
}
|
|
|
|
if err := yaml.Unmarshal(file, out); err != nil {
|
|
return fmt.Errorf("解析 YAML 失败: %w", err)
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func luteHandler() string {
|
|
luteEngine := lute.New()
|
|
|
|
var privateParseOptions LuteParseOptions
|
|
LoadYAML("config/luteParse.yaml", &privateParseOptions)
|
|
luteEngine.ParseOptions = privateParseOptions.toLuteParseOptions()
|
|
|
|
var privateRenderOptions LuteRenderOptions
|
|
LoadYAML("config/luteRender.yaml", &privateRenderOptions)
|
|
luteEngine.RenderOptions = privateRenderOptions.toLuteRenderOptions()
|
|
|
|
file, err := os.ReadFile("post.md")
|
|
if err != nil {
|
|
log.Println("读取文件失败:", err)
|
|
}
|
|
|
|
return luteEngine.Md2HTML(string(file))
|
|
}
|
|
|
|
func handler(w http.ResponseWriter, r *http.Request) {
|
|
// 每次都读取模板文件
|
|
tmpl, err := template.ParseFiles("templates/index.tmpl")
|
|
if err != nil {
|
|
http.Error(w, "模板解析错误", http.StatusInternalServerError)
|
|
return
|
|
}
|
|
|
|
var post BlogData
|
|
err = LoadYAML("config/siteInfo.yaml", &post)
|
|
if err != nil {
|
|
http.Error(w, "无法读取数据", http.StatusInternalServerError)
|
|
return
|
|
}
|
|
post.Content = template.HTML(luteHandler())
|
|
|
|
err = tmpl.Execute(w, post)
|
|
if err != nil {
|
|
http.Error(w, "模板渲染错误", http.StatusInternalServerError)
|
|
}
|
|
}
|
|
|
|
func main() {
|
|
http.HandleFunc("/", handler)
|
|
log.Println("服务器启动,访问 http://localhost:8080")
|
|
log.Fatal(http.ListenAndServe(":8080", nil))
|
|
}
|