почему угловой прокси не работает в Wampserver - PullRequest
0 голосов
/ 10 января 2019

У меня проблема с моим угловым 7 приложением в wampserver

Я сделал это

{
    "/api": {
      "target": "http://localhost:3000",
      "secure": false,
      "changeOrigin": true,
      "logLevel": "debug"
    }
  }

"start": "ng serve --proxy-config proxy.conf.json"

мое приложение возвращает это мне

General
Request URL: http://localhost/api
Request Method: GET
Status Code: 404 Not Found
Remote Address: [::1]:80
Referrer Policy: no-referrer-when-downgrade

Response Headers
Connection: Keep-Alive
Content-Length: 286
Content-Type: text/html; charset=iso-8859-1
Date: Thu, 10 Jan 2019 07:08:40 GMT
Keep-Alive: timeout=5, max=99
Server: Apache/2.4.35 (Win32) PHP/7.2.10

Request Headers
Accept: application/json, text/plain, */*
Accept-Encoding: gzip, deflate, br
Accept-Language: es-ES,es;q=0.9
Connection: keep-alive
Host: localhost
Referer: http://localhost/vdfrontend/

Я использовал файл htacces в каталоге проекта, а также изменил файл виртуального хоста

Файл htaccess содержит следующую информацию

<IfModule mod_rewrite.c>
    RewriteEngine on

    # Don't rewrite files or directories
    RewriteCond %{REQUEST_FILENAME} -f [OR]
    RewriteCond %{REQUEST_FILENAME} -d
    RewriteRule ^ - [L]

    # Rewrite everything else to index.html
    # to allow html5 state links
    RewriteRule ^ index.html [L]
</IfModule>

файл виртуального хоста содержит следующую информацию

# Virtual Hosts
#
<VirtualHost *:80>
  ServerName localhost
  ServerAlias localhost
  DocumentRoot "${INSTALL_DIR}/www"
  <Directory "${INSTALL_DIR}/www/">
    Options +Indexes +Includes +FollowSymLinks +MultiViews
    AllowOverride All
    Require local
  </Directory>
</VirtualHost>

<VirtualHost *:80>
    ServerName localhost

    DocumentRoot "${INSTALL_DIR}/www/vdfrontend"

    <Directory "${INSTALL_DIR}/www/vdfrontend">
        RewriteEngine on

        # Don't rewrite files or directories
        RewriteCond %{REQUEST_FILENAME} -f [OR]
        RewriteCond %{REQUEST_FILENAME} -d
        RewriteRule ^ - [L]

        # Rewrite everything else to index.html
        # to allow html5 state links
        RewriteRule ^ index.html [L]
    </Directory>
</VirtualHost>

мое приложение снова возвращает это мне

General
Request URL: http://localhost/api
Request Method: GET
Status Code: 404 Not Found
Remote Address: [::1]:80
Referrer Policy: no-referrer-when-downgrade

Response Headers
Connection: Keep-Alive
Content-Length: 286
Content-Type: text/html; charset=iso-8859-1
Date: Thu, 10 Jan 2019 07:08:40 GMT
Keep-Alive: timeout=5, max=99
Server: Apache/2.4.35 (Win32) PHP/7.2.10

Request Headers
Accept: application/json, text/plain, */*
Accept-Encoding: gzip, deflate, br
Accept-Language: es-ES,es;q=0.9
Connection: keep-alive
Host: localhost
Referer: http://localhost/vdfrontend/

мое приложение не работает из-за этого, как я могу решить эту проблему?

1 Ответ

0 голосов
/ 11 января 2019

Вероятно, было бы не очень хорошей идеей добавить три новых ответа - было бы лучше просто поместить вашу дополнительную информацию в исходное сообщение: (

ИНАЧЕ:

Вы сказали, что ваш «api» работает на порту 3000. Но ваша трассировка показывает, что «кто-то» (ваш браузер работает с приложением Angular?) Выполняет GET http://localhost/api, порт 80.

Отсюда и ошибка HTTP 404!

ПОТЕНЦИАЛЬНЫЕ РЕШЕНИЯ:

  1. Забудьте о прокси, забудьте о NodeJS - просто разверните свой API на сервере WAMP / Apache. Это должно решить проблему - все будет на порту 80.

  2. В качестве альтернативы рассмотрите возможность использования Angular и вашего API на NodeJS (и забудьте о WAMP, и забудьте о прокси).

  3. Если вы действительно хотите, чтобы два сервера (и WAMP, и NodeJS) работали, вам следует рассмотреть CORS:

    Как работать с CORS в приложениях Angular2 и Node / Express

  4. Еще одна ссылка, которая может оказаться вам полезной:

    Создание REST-Backend для Angular с Node.js & Express

Надеюсь, это поможет .. PSM


Вы МОЖЕТ настроить Apache в качестве обратного прокси-сервера для своего Node API-сервера, если вы действительно этого хотите. Проблема в том, что это не работает. Ваше приложение Angular пытается подключиться к «api» через порт 80; на самом деле это порт 3000. Еще одно осложнение заключается в том, что Apache «требователен» к именам: возможно, это должен быть «/ api /» вместо «/ api» (например, посмотрите здесь ).

Мои предложения заключались в том, чтобы упростить вашу конфигурацию, перенеся все на один или другой сервер, исключив необходимость использования прокси-сервера и исключив любые потенциальные междоменные проблемы с Javascript.

Вот несколько дополнительных ссылок, которые могут помочь:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...