Я новичок в 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}