2016-03-09 3 views
6

GolangでRESTful APIを作成し、Angular2でフロントエンドを作成したいと考えています。 httpリクエストで通信します。 Angular2はGolang APIにリクエストを送信します。私はAngular2のために私はルーティングとサービスのための独自のHTTPサーバーを実行する必要があります知っている。Angular2フロントエンドとGolangバックエンドを1台のサーバでホストすることができます

1つのホストでGolangサーバを実行し、別のホストでAngular2サーバを実行して接続できますか?

答えて

6

Angular2アプリケーションは、一連の静的ファイル(依存関係とアプリケーションコード)に対応しています。 Goでアプリケーションを提供するには、これらのファイルを提供するコードを追加する必要があります。

可能性があります。このリンクを参照してください:

編集

あなたのコメント次のとおりです。

使用すると、1台のサーバーにAngular2とgolangをホストします。たとえば、私はリンクmywebsite.comとgolang api.miwebsite.comへのアクセスを持つWebサイトにアクセスします

私はそれをしない理由は何も分かりません。 APIでCORSをサポートするように注意してください(応答にCORSヘッダーを送信し、あらかじめ用意された要求をサポートしてください)。これらのリンクを参照してください。

+0

一つでも[BINDATA-assetfsのようなものを使用して、バイナリにこれらの資産を含むことができ、 ](https://github.com/elazarl/go-bindata-assetfs)または[go.rice](https://github.com/GeertJohan/go.rice)をクリックします。 –

+0

golangとangular2を別々に使いたいです。 Golangサーバーはjsonデータのみを送信します。 Angularは、golangサーバーAPIからデータを要求し、Webページをレンダリングします。 1台のサーバーで角度とゴーランをホストすることはできますか?例えば、私はリンクhttp://mywebsite.comとゴランapi http://api.mywebsite.comへのアクセスとウェブサイトへのアクセスを持っています – EgorkZe

+0

私はそれをしない理由を見ることができません。 APIでCORSをサポートするように注意してください。 http://restlet.com/blog/2015/12/15/understanding-and-using-cors/を参照してください。 –

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") 
}) 
関連する問題