Angular 6 продолжает возвращать сообщение об ошибке «Http error response для [url here]: 0 Unknown Error» после запроса HttpClient - PullRequest
0 голосов
/ 06 октября 2019

Я новичок в Angular и пытаюсь сделать запрос с помощью Angular 6 HttpClient, но он дает мне ответ

ERROR 
{…}
​
error: error { target: XMLHttpRequest, isTrusted: true, lengthComputable: false, … }
​
headers: Object { normalizedNames: Map(0), lazyUpdate: null, headers: Map(0) }
​
message: "Http failure response for http://localhost:8088/home: 0 Unknown Error"
​
name: "HttpErrorResponse"
​
ok: false
​
status: 0
​
statusText: "Unknown Error"
​
url: "http://localhost:8088/home"
​
<prototype>: Object { … }
vendor.js:43414:33

Я написал бэкэнд в expressjs, и яя добавил заголовки, чтобы разрешить перекрестный доступ к источнику

Как я узнал, что это была проблема, специфичная для angular, это то, что я1. Написал тестовый код на Java, чтобы сделать http-вызов серверу (который работал). 2. Я позвонил прямо из браузера, в котором получил ожидаемый ответ.

Экспресс-приложение:

app.all('*', function(res,req,next){
    res.header('Access-Control-Allow-Origin','http://localhost:4200');
    res.header('Access-Control-Allow-Credentials',true);
    res.header('Access-Control-Allow-Methods','PUT, GET, POST, DELETE, OPTIONS');
    res.header('Access-Control-Allow-Headers','Content-Type');
    next();
});

app.listen(portNumber,(error)=>{
    if (error) throw error
    console.log("Now listening on port "+portNumber+" for server : localhost")
})

app.get("/home",(req,res)=>{
    res.status(400);
    res.send({name:"colin",age:10});
})

Angular App:

ngOnInit() {
    this.getData();
  }

  getData() {
    const httpOptions = {
      headers: new HttpHeaders({
        'Content-Type':  'application/json',
        'Access-Control-Allow-Origin': '*'
      })
    };
    let data = this.httpClient.get('http://localhost:8088/home', httpOptions).subscribe();
    console.log(data);
  }

ТестЯ написал на Java (я написал это, чтобы убедиться, что это не проблема только с сервером):

try
            {
            link = "http://localhost:8088/home";
            link = link.replaceAll("\\s","%20"); // replace all space with %20 that is recognizable by http
            URL url = new URL(link);
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            conn.setRequestMethod("GET");
            try
            {
                rd =  new BufferedReader(new InputStreamReader(conn.getInputStream()));
            } catch (ConnectException e)
            {
                e.printStackTrace();
            }

            String line;
            while ((line = rd.readLine()) != null) {
                result.append(line);
            }
            rd.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        System.out.println(result.toString());

И ответ?

{"name":"colin","age":10}

1 Ответ

0 голосов
/ 06 октября 2019

Ваш ответ находится в асинхронном обратном вызове вызова:

.subscribe(response => {
  // do smth with it
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...