使用代理

时间:2018-05-24 10:38:48

标签: angular5 angular-router

我已经构建了一个Java Restful API,我想从Angular 5访问它。对于开发我有角度服务器在端口4200上运行,而我的后端运行在8080.我正在尝试设置角度代理以便与后端。 所以我创建了以下proxy.conf.json文件:

{
  "/**": {
    "target": "http://localhost:8080",
    "changeOrigin": true,
    "secure": false,
    "logLevel": "debug"
  }
}

然后我在终端

中运行
ng serve --proxy-conf proxy.conf.json

我收到了消息

Proxy created: /**  ->  http://localhost:8080
[HPM] Subscribed to http-proxy events:  [ 'error', 'close' ]      

所以到现在为止一切都很好。

当我输入浏览器网址时,例如

http://localhost:4200/incidents/all

一切正常,我得到了回复

[{ “ID”:55, “protocolNo”:121212222, “日期”:15251.22亿, “isPayed”:真 “yliko”: “fdasdfasfsaf”, “万客隆”: “FDSA”, “anoso”:” FDSA “ ”MIKRO“: ”fdsafds“, ”symperasma“: ”dfsdfsadf“, ”klinikesPlirofories“: ”fsdafds“, ”HISTO“: ”dfsadffga“, ”simpliromatikiEkthesi“: ”fdsadfsdfa“, ”患者“:{” ID “:1,” 名字 “:” Μιχαήλ “ ”姓氏“: ”Τουτουδάκης“, ”生日“: ”1975年8月19日“, ”fatherName“: ”Δημήτριος“, ”电话“: ”6948571893“,” 电子邮件“:” mixtou@gmail.com “ ”性“:真正的 ”市“:{ ”ID“:1, ”名“: ”Χανιά“}, ”医生“:{ ”ID“:1,” 名字“:” όνομα”, “姓氏”: “επίθετο”, “电话”: “2821074737”, “电子邮件”: “papa@papa.com”, “fatherName”: “πατέρας”, “专业”:{ “ID” :1, “名”: “Αγγειοχειρουργική”}, “城市”:{ “ID”:1, “名”: “Χανιά”}, “诊所”:{ “ID”:1, “名”:“Κλινική Τσεπέτη”, “电话”: “123456789”, “地址”: “Παπαναστασίου”, “电子邮件”: “test@test.com”}, “signingDoctor”:{ “ID”:1, “姓氏”: “Δασκαλάκη” “名字”: “Άννα”}, “mikroskopikaSymperasma”:空“anosoEkthesi”:空, “癌症”:真正},{ “ID”:56, “protocolNo”:11111, “日期”:1525640400000, “isPayed”:假的, “yliko”: “dfsadfs”, “万客隆” : “dfsfsdfdsdfsadfsa”, “anoso”: “dfsdfsfdssfafasd”, “MIKRO”: “dsfdfsadfsadfssdf”, “symperasma”: “σδγσδγσαδγσγσασδγ”, “klinikesPlirofories”: “δδφφγφγαφαγ”, “HISTO”: “fdsasdfd”, “simpliromatikiEkthesi”:” γαγσαδσγσδγσδαγ “ ”患者“:{ ”ID“:5, ”名字“: ”Στέφανος“, ”姓氏“: ”Μαριόλος“, ”生日“: ”2018年3月26日“, ”fatherName“: ”“,”电话 “:” 4838583845" , “电子邮件”: “”, “性”:真正的 “市”:{ “ID”:2, “名”: “Ρέθυμνο”}, “医生”:{ “ID”: 3, “名字”: “Χαράλαμπος”, “姓氏”: “Πρωτοπαπαδάκης”, “电话”: “4343454345”, “电子邮件”: “”, “fatherName”: “”, “专业”:{ “ID”:29 ,“名称”:“Πνευμονολογία - Φυματιολογία”},“city”:{“id”:1,“name”:“Χανιά”}},“诊所”:{“id”:1,“name”:“Κλινική Τσεπέτη “ ”电话“: ”123456789“, ”地址“: ”Παπαναστασίου“, ”电子邮件“: ”test@test.com“},” 显ngDoctor “:{” ID “:1,” 姓氏 “:” Δασκαλάκη”, “名字”: “Άννα”}, “mikroskopikaSymperasma”: “γσαγδσασαδγδασγαγσγσ”, “anosoEkthesi”: “φδαφγφγφδσγ”, “癌症”:真}]

然而,从角度访问后端终点我什么都没得到。 例如,对于事件,我有以下服务:

getIncidents(): Observable<Incident[]> {
    console.log('getting incidents');
    const incidentsUrl = '/incidents/all';
    return this.http.get<Incident[]>(incidentsUrl)
      .pipe(catchError(ErrorHandler.handleError));
  }

在javascript控制台中生成以下错误:

core.js:1440 ERROR Error: Uncaught (in promise): TypeError: Cannot read property 'push' of undefined
TypeError: Cannot read property 'push' of undefined

在以下行:

this.subscriptions.push(this.incidentsService.getIncidents().subscribe((results) => {
              this.comService.sendIncidents(results);
              this.spinner.hide();
            }));

这意味着this.incidentsService.getIncidents()什么都没有回复?

任何想法?

1 个答案:

答案 0 :(得分:0)

我删除了this.subscriptions.push(...)操作,一切正常。为什么在使用订阅时会发生这种情况。我需要它们,因为onDestroy我调用subscription.unsubsribe()以避免内存泄漏。 请注意,使用代理时会发生这种情况如果我不使用代理并将项目部署到tomcat一切正常。我在push()中没有null。 任何想法???

问题出在订阅声明上。最初是:

subscriptions: Subscription[];

我把它改成了

subscriptions: Subscription[] = [];

一切正常。

subscriptions

未初始化。