Http-ошибка при ответе на локальный API-запрос: 0 неизвестная ошибка - угловая - PullRequest
0 голосов
/ 22 марта 2019

Я пытаюсь создать связь с моим Java Jetty Backend из моего приложения Angular.Когда я пытаюсь выполнить мой запрос, я получаю следующую ошибку:

Error on request

Мой код на стороне клиента: (угловой 7.2.1).Я также использую HttpInterceptor для аутентификации, которая должна работать.Я также запускаю код в режиме разработки с ng serve.

@Injectable({
    providedIn: 'root'
})
export class NgHydrantService {

    constructor(private http: HttpClient) {
    }
  
    public register(entity: IEntityDescription): Observable<StandardResponsePacket> {
        let packet = new RegisterEntityRequestPacket(entity);
        return this.http.post(this._apiUrl, packet.toJson())
            .pipe(
                map(value => {
                    console.log('register result:', value); //<-- never executed
                    return <StandardResponsePacket>HydrantPackage.fromJson(value)
                })
            );

    }
}

//The interceptor
intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
        // add authorization header with basic auth credentials if available
        if (this.user != null) {

            const clonedRequest = request.clone({
                headers: request.headers.set('Authorization', `Basic ${this.user.getAuth()}`)
                                        .set('Accept','application/json')
            });
            //This debug line works and looks good!
            console.log('NgHydrantAuthInterceptor#intercept', clonedRequest);
            return next.handle(clonedRequest);
        }

        return next.handle(request);
    }

Мой код на стороне сервера: (Jetty-9.4.14.v20181114), работающий на локальном хосте.

public final class PacketHandler extends AbstractHandler
{
  @Override
  public void handle( String target,
                    Request baseRequest,
                    HttpServletRequest request,
                    HttpServletResponse response ) throws IOException
  {
    try
    {
        // Declare response encoding and types
        response.setContentType( "application/json; charset=utf-8" );
        // Enable CORS
        response.addHeader("Access-Control-Allow-Origin", "*");
        response.addHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, PUT, DELETE, HEAD");
        response.addHeader("Access-Control-Allow-Headers", "X-PINGOTHER, Origin, X-Requested-With, Content-Type, Accept");
        response.addHeader("Access-Control-Max-Age", "1728000");
        //... more stuff
    }
    finally
    {
        // Inform jetty that this request was handled
        baseRequest.setHandled( true );
    }
  }
}

Вещи, которые я проверял:

  • Во время исследования некоторые люди ссылаются на проблемы с CORS (поэтому я добавил записи заголовков в коде на стороне сервера)
  • Тот же запрос в Postman работает без проблем
  • На стороне сервера нет журналов

Мой вопрос касается возможного решения для получения ответов от моего сервера во время разработки.

Ответы [ 2 ]

0 голосов
/ 18 апреля 2019

Мне удалось решить возможную проблему, установив конфигурацию моего веб-сервера, чтобы разрешить политику cors. В моем случае я использую веб-сервер Nginx, следуя конфигурации по этой ссылке https://enable -cors.org / server_nginx.html

0 голосов
/ 22 марта 2019

Пожалуйста, следуйте инструкциям ниже https://www.html5rocks.com/en/tutorials/cors/ Для быстрого решения добавьте плагин ниже в свой хром https://chrome.google.com/webstore/detail/allow-control-allow-origi/nlfbmbojpeacfghkpbjhddihlkkiljbi?hl=en

...