EgorkZe
@EgorkZe
iOS (Swift), GoLang

Как можно сконфигурировать сервер, чтоб на нем работал бэкенд на Golang и фронтенд на Angular2?

Добрый день! Я хочу написать веб приложение, данные которого будут обрабатываться бэкендом на Golang а рендерить страницы будет Angular2 фронтенд. Причем сервер будет написан в рестфул и совсем не будет заниматься рендерингом html. Это мне нужно для того, чтоб потом к существующему апи было легко обращаться с мобильных приложений. Дело в том, что у angular2 должен быть запущен свой сервер, который занимается роутингом и отдачей статики, но и также должен быть запущен мой go сервер. И вопрос заключается вот в чем, как мне можно это все запустить вместе на одном хосте, чтоб ангуляр и го дружно работали вместе? Я слышал что можно как то все это запускать с помощью nginx но без понятий как это сделать. Спасибо.
  • Вопрос задан
  • 1358 просмотров
Решения вопроса 1
cjbars
@cjbars
Может я чего-то не понимаю, но Angular работает на клиенте, и от сервера ему нужно только получить все свои файлы и общаться с api бэкенда.

можно настроить nginx
например так:

server{
   listen 80;
   server_name example.com;

   location /api{
    proxy_pass ВАШ БЭКЕНД
   }

  location / {
    # отдача статики для ангуляра
    try_files $uri /$uri 404;
  }

}
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@redakoc
Неужели нельзя обойтись без "сервера Ангуляра"? Как-то не рационально.

nginx позволяет часть URL отдавать одному, а часть - другому.

Используйте разные location:

location .... {
}
Ответ написан
Комментировать
rkravchik
@rkravchik
System Solutions
Прятать go сервер за nginx не самая лучшая идея. На высоконагруженном проекте будут просадки.
Сначала определитесь с роутером для go сервера, а потом уже можно задавать вопросы, как его прикрутить к Angular.

Вдобавок к своему комментарию ниже:
func main() {
    http.HandleFunc("/", func(response http.ResponseWriter, request *http.Request) {
        http.ServeFile(response, request, "/var/www/default/htdocs/index.html")
    })

    http.Handle("/public/", http.StripPrefix("/public/", http.FileServer(http.Dir("/var/www/default/htdocs/public"))))

    http.HandleFunc("/json", func(response http.ResponseWriter, request *http.Request) {
        // serves a JSON response
    })

    http.HandleFunc("/socket", func(w http.ResponseWriter, r *http.Request) {
        // replies to the WebSocket
    })

    http.ListenAndServe(":3000", nil)
}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы