我正在编写一个与Express服务器通信的Angular应用程序。自从过去几天以来,我陷入了一个非常奇怪的问题,如下所示:
当用户加载网页时,我正在向服务器发出帖子请求。有两种情况:
http://localhost:4200
。我将以编程方式将URL更改为http://localhost:4200/allresults?query=
。并在http://localhost:3000/allresults
处发布帖子请求,有效负载为criteriaObj={query:'cat'}
http://localhost:4200/allresults?query=
。我将在http://localhost:3000/allresults
处发布一个帖子请求,有效负载为criteriaObj={query:'cat'}
现在的问题是:在第一种情况下,服务器没有响应。在第二种情况下,服务器按预期返回响应
重要的是要注意两种情况下的帖子请求的性质和有效负载是相同的。
视频(因为它有多令人难以置信):
以下是youtube上的50秒视频录制。在这个视频中,我使用chrome中的断点来表明Http.subscrible()的回调在第一种情况下没有运行,而在第二种情况下运行正常 https://youtu.be/F_tpnm9JoY0
其他详细信息:
Chrome控制台:
XHR finished loading: OPTIONS "http://localhost:3000/allresults".
XHR finished loading: OPTIONS "http://localhost:3000/allresults".
和XHR finished loading: POST "http://localhost:3000/allresults"
。在服务器中,我得到了:
1.案例1:OPTIONS /allresults
2.在案例2中:OPTIONS /allresults
和POST /allresults
提出服务器请求的角度代码:
/*Following code sends criteriaObj to server
* Also following code is INDEPENDENT OF HOW WE REACHED HERE
* */
criteriaObj = {searchQuery:"cat"};
this.subscriptionPost = this.http.post('http://localhost:3000/allresults', criteriaObj)
.map((response: any) => response.json())
.catch((err: Response) => Observable.throw(err.json()))
.subscribe(
/*following callback is NOT called when url at the time host was http://localhost:4200*/
(value:any) =>{
this.global.resultsArray = value;
},
(error)=>{
console.log(error);
}
);
在快速代码中,我有CORS支持使用此代码:
app.use(function(req, res, next) {
res.setHeader('Access-Control-Allow-Origin', '*');
res.setHeader('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content-Type, Accept');
res.setHeader('Access-Control-Allow-Methods', 'POST, GET, PATCH, DELETE, OPTIONS');
next();
});
我将非常感谢您对此进行调试的任何帮助/建议。
答案 0 :(得分:0)
我终于找到了它,这是一个臭虫的地狱。这非常有趣。
总之,发出请求的组件被来自服务器的响应时间破坏,并被另一个类似的组件替换(用肉眼看不到)。另外,在ngOnDestroy钩子中,我从发布请求中取消订阅,这使得服务器似乎没有响应。