当客户端URL为http:// localhost:4200时,服务器不响应发布请求

时间:2017-09-30 17:40:29

标签: node.js angular express

我正在编写一个与Express服务器通信的Angular应用程序。自从过去几天以来,我陷入了一个非常奇怪的问题,如下所示:

当用户加载网页时,我正在向服务器发出帖子请求。有两种情况:

  1. 如果重新加载时的网址为:http://localhost:4200。我将以编程方式将URL更改为http://localhost:4200/allresults?query=。并在http://localhost:3000/allresults处发布帖子请求,有效负载为criteriaObj={query:'cat'}
  2. 如果重新加载时的网址为:http://localhost:4200/allresults?query=。我将在http://localhost:3000/allresults处发布一个帖子请求,有效负载为criteriaObj={query:'cat'}
  3. 现在的问题是:在第一种情况下,服务器没有响应。在第二种情况下,服务器按预期返回响应

    重要的是要注意两种情况下的帖子请求的性质和有效负载是相同的。

    视频(因为它有多令人难以置信):

    以下是youtube上的50秒视频录制。在这个视频中,我使用chrome中的断点来表明Http.subscrible()的回调在第一种情况下没有运行,而在第二种情况下运行正常 https://youtu.be/F_tpnm9JoY0

    其他详细信息

    Chrome控制台:

    1. 案例1:XHR finished loading: OPTIONS "http://localhost:3000/allresults".
    2. 案例2:XHR finished loading: OPTIONS "http://localhost:3000/allresults".XHR finished loading: POST "http://localhost:3000/allresults"
    3. enter image description here

      在服务器中,我得到了:

      1.案例1:OPTIONS /allresults

      2.在案例2中:OPTIONS /allresultsPOST /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();
      });
      

      我将非常感谢您对此进行调试的任何帮助/建议。

1 个答案:

答案 0 :(得分:0)

我终于找到了它,这是一个臭虫的地狱。这非常有趣。

总之,发出请求的组件被来自服务器的响应时间破坏,并被另一个类似的组件替换(用肉眼看不到)。另外,在ngOnDestroy钩子中,我从发布请求中取消订阅,这使得服务器似乎没有响应。