加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

golang在指定的路由返回静态html文件

发布时间:2020-12-16 09:24:30 所属栏目:大数据 来源:网络整理
导读:我正在开发一个简单的待办事项应用程序. 我已经确定除了用户的待办事项列表之外的所有页面都可以安全地成为静态html页面. * 登录表格 *新帐户表格 *索引页面,讨论todo应用程序 我认为这些目前没有理由去模板. 我的问题是如何(在内部,不使用像nginx这样的东西
我正在开发一个简单的待办事项应用程序.

我已经确定除了用户的待办事项列表之外的所有页面都可以安全地成为静态html页面.
* 登录表格
*新帐户表格
*索引页面,讨论todo应用程序

我认为这些目前没有理由去模板.

我的问题是如何(在内部,不使用像nginx这样的东西)我可以有一个静态的html设置来最有效地返回特定路线吗?

例如,在“/”处返回index.html

我知道我可以这样做:

func GetNewAccount(res http.ResponseWriter,req *http.Request) {
        body,_ := ioutil.ReadFile("templates/register.html")
        fmt.Fprint(res,string(body))
}

要么

var register,_ = string(ioutil.ReadFile("templates/register.html"))
func GetNewAccount(res http.ResponseWriter,req *http.Request) {
        fmt.Fprint(res,register)
}

对我来说,这些似乎更迂回的方式来做一些看似简单的事情.

解决方法

如果所有静态文件在同一个树下,则可以使用 http.FileServer:

http.Handle("/s/",http.StripPrefix("/s/",http.FileServer(http.Dir("/path/to/static/files/"))))

否则,将您想要的html文件预加载到func init()中的映射中,然后根据请求的路径为fmt.Fprint创建一个处理程序.

简单静态文件处理程序的示例:

func StaticFilesHandler(path,prefix,suffix string) func(w http.ResponseWriter,req *http.Request) {
    files,err := filepath.Glob(filepath.Join(path,"*",suffix))
    if err != nil {
        panic(err)
    }
    m := make(map[string][]byte,len(files))
    for _,fn := range files {
        if data,err := ioutil.ReadFile(fn); err == nil {
            fn = strings.TrimPrefix(fn,path)
            fn = strings.TrimSuffix(fn,suffix)
            m[fn] = data
        } else {
            panic(err)
        }
    }
    return func(w http.ResponseWriter,req *http.Request) {
        path := strings.TrimPrefix(req.URL.Path,prefix)
        if data := m[path]; data != nil {
            fmt.Fprint(w,data)
        } else {
            http.NotFound(w,req)
        }
    }
}

然后你就可以使用它:

http.Handle("/s/",StaticFilesHandler("/path/to/static/files","/s/",".html"))

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读