我可以在一台服务器上托管Angular2前端和Golang后端

时间:2016-03-09 08:01:43

标签: go angular frontend backend

我想用Golang创建RESTful API,并使用Angular2创建前端。 将与http请求进行通信。 Angular2将向Golang API发送请求。我知道Angular2我应该为路由和服务运行自己的http服务器。

我可以在一台主机上运行Golang服务器,在另一台主机上运行Angular2服务器并将它们连接在一起吗?

2 个答案:

答案 0 :(得分:6)

Angular2应用程序对应于一组静态文件(依赖项和应用程序代码)。要让Go为您的应用程序提供服务,您需要添加一些代码来提供这些文件。

似乎有可能。看到这个链接:

修改

发表评论:

  

如果你想在一台服务器上托管Angular2和golang。例如,我将访问链接mywebsite.com的网站并访问golang api api.mywebsite.com

我看不出有任何理由不这样做。请注意在API中支持CORS(在响应中发送CORS头并支持预先刷新的请求)。请参阅以下链接:

答案 1 :(得分:5)

使用stadand库实际实现

type Adapter func(http.Handler) http.Handler

// Adapt function to enable middlewares on the standard library
func Adapt(h http.Handler, adapters ...Adapter) http.Handler {
    for _, adapter := range adapters {
        h = adapter(h)
    }
    return h
}

// 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", 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")
})