为了账号安全,请及时绑定邮箱和手机立即绑定

Golang + 角

Golang + 角

Go
神不在的星期二 2021-12-13 17:11:31
我开始尝试使用 Go 和 Angular,但我有一个奇怪的问题..我想我只是遗漏了一个小细节,但我无法弄清楚。我正在使用https://github.com/julienschmidt/httprouter作为 Go 的路由器......现在使用 Angular,我应该能够将 URL 复制并粘贴到浏览器中,Angular 应该处理相应的路由,对吗?我有一个“/登录”路线。如果通过前端访问路由....Go 路由基本上只是在做router.NotFound = http.FileServer(http.Dir("./public"))这适用于“/”路线,但不适用于其他任何路线。这似乎是正确的。但是如何正确设置路由,以便 Angular 处理所有路由?
查看完整描述

3 回答

?
江户川乱折腾

TA贡献1851条经验 获得超5个赞

这就是我在标准 Go 库中使用的,路由效果很好。


在此处查看Adapt 功能


// Creates a new serve mux

mux := http.NewServeMux()


// Create room for static files serving

mux.Handle("/node_modules/", http.StripPrefix("/node_modules", http.FileServer(http.Dir("./node_modules"))))

mux.Handle("/html/", http.StripPrefix("/html", http.FileServer(http.Dir("./html"))))

mux.Handle("/js/", http.StripPrefix("/js", http.FileServer(http.Dir("./js"))))

mux.Handle("/ts/", http.StripPrefix("/ts", http.FileServer(http.Dir("./ts"))))

mux.Handle("/css/", http.StripPrefix("/css", http.FileServer(http.Dir("./css"))))


// Do your api stuff**

mux.Handle("/api/register", util.Adapt(api.RegisterHandler(mux),

    api.GetMongoConnection(),

    api.CheckEmptyUserForm(),

    api.EncodeUserJson(),

    api.ExpectBody(),

    api.ExpectPOST(),


))

mux.HandleFunc("/api/login", api.Login)

mux.HandleFunc("/api/authenticate", api.Authenticate)


// Any other request, we should render our SPA's only html file,

// Allowing angular to do the routing on anything else other then the api    

// and the files it needs for itself to work.

// Order here is critical. This html should contain the base tag like

// <base href="/"> *href here should match the HandleFunc path below 

mux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {

    http.ServeFile(w, r, "html/index.html")

})


查看完整回答
反对 回复 2021-12-13
?
幕布斯6054654

TA贡献1876条经验 获得超7个赞

您可以http直接使用该包。


索引页

http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {

    http.ServeFile(w, r, "./public/index.html")

})

这将为所有与路由不匹配的请求提供 index.html 文件。


文件服务器

http.Handle("/public/", http.StripPrefix("/public/", http.FileServer(http.Dir("./public"))))

这将为公共目录中的所有文件提供服务。


不要忘记启动你的服务器


http.ListenAndServe(":8000", nil)


查看完整回答
反对 回复 2021-12-13
?
慕斯王

TA贡献1864条经验 获得超2个赞

使用 goji 微框架


https://github.com/zenazn/goji


很容易使用


func render_html_page(w http.ResponseWriter, url string) {

    t, err := template.ParseFiles(url) 

    if err != nil {

        panic (err)

    }

    t.Execute(w, nil)

}


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

    render_html_page(w, "./public/index.html")

}


func main() {

        goji.Get("/", index)

        goji.Serve()

}

此代码有效,您只需要进行导入


查看完整回答
反对 回复 2021-12-13
  • 3 回答
  • 0 关注
  • 144 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信