Как запустить Node Express server и Angular на одном порту?
Я новичок в узле и угловом. Мне нужно знать, возможно ли запустить приложение Node Express, служащее бэкэндом и угловым интерфейсом на одном порту. Я следовал угловым подсказкам Quickstart на угловом.io и создал приложение Node todo, но оба работают на разных портах,что вызывает проблему блокировки запроса Cross Origin.
3 ответов
чтобы получить Angular и Express, работающий на том же порту, я всегда обслуживал файлы угловой сборки самим приложением Express. Вы должны быть в состоянии сказать Express, чтобы обслуживать статический контент из углового каталога сборки, как это:
app.use(express.static('../accounting-client/dist'));
который будет работать, если у вас есть файловая структура, как так и работает serve.js
С узла:
-accounting-server
-serve.js
-accounting-client
-dist/*
вы можете настроить по мере необходимости, настроив папку угловой сборки там, где вам это нужно, или использовать Grunt / Gulp для перемещения файлы в папки, которые вы предпочитаете с задачей построить.
как упоминал Яков, это не идеально подходит для разработки, так как он не будет работать с автоматическим обновлением сервера Angular dev.
есть узел.js обслуживают приложение Angular на том же порту, ваше приложение Angular должно быть развернуто в каталоге вашего узла, где развернуты статические ресурсы. Но в режиме dev более продуктивно обслуживать ваши угловые пакеты (поэтому они автоматически перестраиваются в памяти по мере кода) с сервера dev, например, на порту 4200, в то время как сервер узла работает на другом порту, например 8080.
чтобы избежать проблем с перекрестным происхождением, вам нужно настроить простой прокси-файл в приложении Angular для перенаправления все запросы данных на сервер узла. Например, создайте файл proxy-conf.json в корневом каталоге вашего углового проекта:
{
"/api": {
"target": "http://localhost:8080",
"secure": false
}
}
это перенаправит все запросы, которые имеют /api
в URL-адресе вашего сервера узла, предполагая, что он работает на порту 8080. Затем запустите приложение Angular, используя следующую команду:
ng serve --proxy-config proxy-conf.json
HTTP-запрос в вашем угловом приложении может выглядеть так:
http.get('/api/products');
конечно, вам нужно настроить /api/products
конечная точка для GET запросы на сервере узла.
тот факт, что вам нужно иметь доступ к вашему клиентскому проекту из Экспресс-проекта, как spacefozzy - сказал, - Это правда. но вы все еще можете разделять свои проекты.
Для этого можно создать символическую ссылку из каталога клиентского проекта в каталоге Экспресс-проекта:
// while in Express directory
ln -s ~/path/tp/client-side/build name-in-espress-dir
таким образом, вы можете сохранять проекты, изолированные.