Как отправлять запросы в локальное приложение Rails из локального приложения AngularJS, запущенного на другом порту?
Я занимаюсь разработкой веб-приложения с использованием внешнего интерфейса AngularJS и внутреннего интерфейса Rails.
Моя цель состоит в том, чтобы сохранить эти два понятия совершенно отдельно, поскольку приложение Rails в конечном итоге будет переведено на простой REST-сервер, а внешний интерфейс AngularJS станет лишь одним из нескольких разных клиентов, использующих бэкэнд. По этой причине я не хочу интегрировать интерфейс в конвейер ресурсов Rails или что-то подобное.
Приложение Rails работает локально на порту 3000. Интерфейс использует Gulp для компиляции статических ресурсов и BrowserSync, который содержит сервер разработки, который я запускаю на порту 3001.
В целях разработки, как я могу заставить приложение AngularJS общаться с сервером Rails, избегая этой ошибки браузера (что я и ожидал) при выполнении HTTP-запроса через службу $ http Angular?
No 'Access-Control-Allow-Origin' header is present on the requested resource.
Origin 'http://localhost:3001' is therefore not allowed access.
Мне просто нужно настроить CORS в приложении Rails? Есть ли другой способ - может быть, какой-то трюк с локальными файлами хостов (я на Mac, FWIW) или что-то подобное? Я спрашиваю, потому что мой коллега отвечает за приложение Rails (у меня ограниченный опыт работы с Rails), но некоторое время не в городе; мои знания в основном ограничены стэком AngularJS, который я настроил.
Я искал и читал около часа, но пока не смог найти ничего, что я мог бы найти, что применимо к моей ситуации. Я мог бы не знать о лучших поисковых терминах.
Спасибо за любую помощь!
1 ответ
Ах, замечательно. Вот несколько решений:
- установить CORS, который не должен быть слишком сложным. Все, что вам нужно сделать, это добавить заголовки к страницам, обслуживающим ваш статический контент (не к конечным точкам REST rails). Проблема в том, что вы не должны делать это, если у вас нет веских причин (см. 3). Как вы обслуживаете статический контент? Там должны быть плагины, чтобы сделать заголовки для вас, если это популярный инструмент
- обслуживайте страницы angularJS из бэкэнда рельсов (используя какой-то статический маршрут)
- если вы думаете о производстве и хотите разобраться с этим навсегда, используйте nginx, чтобы проксировать две службы в одном домене, http://nginx.org/en/docs/beginners_guide.html