Получите net :: ERR_EMPTY_RESPONSE при развертывании приложения Angular на рабочем сервере - PullRequest
0 голосов
/ 05 июля 2019

Я создаю приложение Angular, которое прекрасно работает на моей машине для разработки. Сейчас я пытаюсь установить его на производственный сервер Windows. Для этого я установил apache, чтобы обслуживать это приложение, а также API службы отдыха, который входит в комплект. Если я открою веб-браузер и сервер и использую свое приложение Angular через общедоступный IP-адрес (https), оно будет работать хорошо. Если я делаю то же самое с другого компьютера, я могу попасть на первую страницу входа в систему, но когда я хочу войти, я получаю следующее сообщение об ошибке: -> ОПЦИИ http://localhost:5001/users/authenticate net :: ERR_EMPTY_RESPONSE

Я пытаюсь настроить брандмауэр, но это не помогает, я читаю много тем, но не могу найти ответ.

Остальное API сделано в C #, функция настройки запуска выглядит так:

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
        {
            loggerFactory.AddConsole(Configuration.GetSection("Logging"));
            loggerFactory.AddDebug();

            Console.WriteLine("Hello Welcome to WebAPI service");

            // global cors policy
            app.UseCors(x => x
                .AllowAnyOrigin()
                .AllowAnyMethod()
                .AllowAnyHeader()
                //.WithOrigins( "http://localhost:80" )
                //.SetIsOriginAllowed( isOriginAllowed: _ => true )
                .AllowCredentials());

            app.UseAuthentication();

            app.UseMvc();
        }

Вызов API из Angular App выглядит следующим образом:

return this.http.post<any>(`${this.env.apiUrl}/users/authenticate`, { username, password })
            .pipe(map(user => {
                // login successful if there's a jwt token in the response
                if (user && user.token) {
                    // store user details and jwt token in local storage to keep user logged in between page refreshes
                    localStorage.setItem('currentUser', JSON.stringify(user));
                    this.currentUserSubject.next(user);
                }

                return user;
            }));

Файл env.js:

(function (window) {
    window.__env = window.__env || {};

    // API url
    window.__env.apiUrl = 'http://localhost:5001';

    // Whether or not to enable debug mode
    // Setting this to false will disable console output
    //window.__env.enableDebug = true;
  }(this));

Ответы [ 2 ]

0 голосов
/ 05 июля 2019

Ваше угловое приложение работает на стороне клиента .Таким образом, вы не можете вызывать свой API через localhost, так как клиент не будет иметь бэкэнд, работающий локально.

Он работал, когда вы разрабатывали приложение, потому что ваш бэкэнд работал на вашем компьютере.Он также работает на вашем сервере, потому что, как я понимаю, ваш бэкэнд и ваше приложение Angluar находятся на одном сервере.

Сначала подумайте, чтобы проверить, правильно ли настроен ваш API на вашем сервере, поэтому запустите его с помощьюПочтальон с вашего локального компьютера, чтобы проверить, что он может быть доступ.

Если он работает, вы должны установить свой env.apiUrl на общедоступный IP-адрес сервера и с правильным номером порта.

0 голосов
/ 05 июля 2019

Можем ли мы увидеть файл вашей среды?Я предполагаю, что вам нужно, чтобы ваша переменная env.apiUrl была установлена ​​на ваше публичное доменное имя или IP, а не на localhost, что, по-видимому, имеет место.

Запросы API вызываются из вашего клиента, а не с сервера,Поэтому, когда пользователь получит доступ к вашему сайту, он будет вызывать ваш API, расположенный на вашем сервере, со своего компьютера.Вот почему вам нужно установить env.apiUrl для домена или IP-адреса вашего сервера с правильным портом.

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