2016-03-09 37 views
6

Tôi muốn tạo RESTful API với Golang và giao diện người dùng với Angular2. Giao tiếp sẽ được thực hiện với các yêu cầu http. Angular2 sẽ gửi yêu cầu tới Golang API. Tôi biết cho Angular2 tôi nên chạy máy chủ http riêng để định tuyến và dịch vụ.Tôi có thể lưu trữ giao diện Angular2 và phụ trợ Golang trong một máy chủ

Tôi có thể chạy máy chủ Golang trên một máy chủ và máy chủ Angular2 trên máy chủ khác và kết nối chúng với nhau không?

Trả lời

6

Ứng dụng Angular2 tương ứng với một tập hợp các tệp tĩnh (phụ thuộc và mã ứng dụng). Để ứng dụng của bạn được cung cấp bởi Go, bạn cần phải thêm một số mã để phân phối các tệp này.

Có vẻ như có thể. Xem liên kết này:

Sửa

Tiếp theo nhận xét của bạn:

Nếu bạn muốn lưu trữ Angular2 và golang trong một máy chủ. Ví dụ: tôi sẽ có quyền truy cập vào trang web có liên kết mywebsite.com và truy cập vào golang api api.mywebsite.com

Tôi không thể thấy bất kỳ lý do nào để không làm điều đó. Chỉ cần cẩn thận để hỗ trợ CORS trong API của bạn (gửi các tiêu đề CORS trong phản hồi và hỗ trợ các yêu cầu được định trước). Xem những liên kết này:

+0

Một thậm chí có thể bao gồm những tài sản vào nhị phân, sử dụng những thứ như [bindata-assetfs ] (https://github.com/elazarl/go-bindata-assetfs) hoặc [go.rice] (https://github.com/GeertJohan/go.rice). –

+0

Tôi muốn sử dụng golang và angular2 separatly. Máy chủ Golang sẽ chỉ gửi dữ liệu json. Angular sẽ yêu cầu dữ liệu từ máy chủ golang api và render các trang web. Tôi có thể lưu trữ góc cạnh và golang trong một máy chủ không? Ví dụ tôi sẽ có quyền truy cập vào trang web với liên kết http://mywebsite.com và truy cập vào golang api http://api.mywebsite.com – EgorkZe

+0

Tôi không thể thấy bất kỳ lý do nào để không làm điều đó. Chỉ cần cẩn thận để hỗ trợ CORS trong API của bạn. Xem http://restlet.com/blog/2015/12/15/understanding-and-using-cors/ –

5

thực hiện thực tế với thư viện 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") 
}) 
Các vấn đề liên quan