小程序开发定制angular2中proxy的使用(问题解决)[HPM] Error occurred while trying to proxy request 的一种情况

        小程序开发定制最近在学习angular2框架,感叹angular出现的bug小程序开发定制解决起来有点难(bushi),小程序开发定制主要是国内使用angular较少,小程序开发定制百度不出来,Google小程序开发定制的话倒是能给点提示,但是英文看着很不舒服。这段纯属吐槽。接下来是我今天上午遇到的问题和解决方法。

        之前成功的使用nginx反向代理实现了浏览器跨域访问。但是本地重新启动一个服务来解决跨域问题显然并不是最优解。

        于是今天尝试使用angular/cli中自带的webpack.proxy.server进行proxy来解决浏览器跨域问题。

根据网上的文章,配置流程大概是:

        1.创建proxy.config.json,配置要跨域访问的接口

  1. {
  2. "/api-81": {
  3. "target": "http://81.70.233.131:3000",
  4. "secure": false,
  5. "logLevel": "debug",
  6. "changeOrigin": true,
  7. "pathRewrite": {
  8. "^/api-81": ""
  9. }
  10. },
  11. "/api-163": {
  12. "target": "https://c.m.163.com",
  13. "logLevel": "debug",
  14. "changeOrigin": true,
  15. "secure": false,
  16. "pathRewrite": {
  17. "^/api-163": ""
  18. }
  19. }
  20. }

        2.在angular.json 中添加项

"proxyConfig": "proxy.config.json"

        3.在package.json 中做如下修改

"start": "ng serve  --proxy-config proxy.config.json",

         4.通过如下地址访问并重启项目

       [HPM] Error occurred while trying to proxy request 错误

         整个流程配置结束之后发现,浏览器端可以正常运行,但是并没有Console.log任何信息。观察控制台,报如下错误。 

  1. [HPM] Error occurred while trying to proxy request
  2. /ug/api/wuhan/app/data/list-total from localhost:4200 to
  3. https://c.m.163.com (ETIMEDOUT)
  4. (https://nodejs.org/api/errors.html#errors_common_system_errors)
  5. [HPM] Error occurred while trying to proxy request
  6. /api-81/getTeacherList from localhost:4200 to
  7. http://81.70.233.131:3005 (ECONNRESET)
  8. (https://nodejs.org/api/errors.html#errors_common_system_errors)

        这里是webpack.proxy.server抛出的错误,我们可以从node_modules中找出这个服务器配置代码并做一点修改,来抛出更加详细的错误以便于我们解决问题。

        webpack.proxy.server 在/node_modules/http-proxy-middleware/lib/index.js,找到其中关于错误抛出的代码,将详细错误抛出。

  1. //node_modules/http-proxy-middeleware/lib/index.js 错误函数
  2. ...
  3. function logError(err, req, res) {
  4. var hostname =
  5. (req.headers && req.headers.host) || (req.hostname || req.host) // (websocket) || (node0.10 || node 4/5)
  6. var target = proxyOptions.target.host || proxyOptions.target
  7. var errorMessage =
  8. '[HPM] Error occurred while trying to proxy request %s from %s to %s (%s) (%s)'
  9. var errReference =
  10. 'https://nodejs.org/api/errors.html#errors_common_system_errors' // link to Node Common Systems Errors page
  11. logger.error("---------> 打印详细错误代码<---------") //添加的代码
  12. logger.error(err) //添加的代码
  13. logger.error(
  14. errorMessage,
  15. req.url,
  16. hostname,
  17. target,
  18. err.code || err,
  19. errReference
  20. )
  21. }
  22. }
  23. ....

 修改之后,报错信息为:

        socket hang up,顾名思义,socket连接断开。这个错误是nodejs也就是proxy.server抛出的。说明和后台连接不成功(超时)。出现这种情况有一种可能是因为后台服务器设置的断开时间较短,而数据又较大。

        而在这里,数据包并不大,且多个连接均超时。说明本地存在问题。而连接超时很大一部分问题出在网络质量上。

        我的网络连接的是公司的内网,对外网的访问有限制。因此nginx和这里的反向代理服务器都无法私自访问外网。这也是本错误的最终原因。

最终原因:

        内网导致反向代理服务器无法连接对应接口,时间达到后抛出超时的错误。

解决方法:

        更换网络连接。我这里直接换成个人热点,问题马上解决。

返回的结果

         思考:在nginx尝试反向代理的时候曾经遇到的这个内网限制的问题,所以这次只用了一个上午查找(bushi)。在进行网络相关的测试的时候,除了配置项以外,也要注意本地网络连接的影响。重要的是锁定问题出现的位置,体现在代码上就是根据抛出错误提示来思考和改正。

网站建设定制开发 软件系统开发定制 定制软件开发 软件开发定制 定制app开发 app开发定制 app开发定制公司 电商商城定制开发 定制小程序开发 定制开发小程序 客户管理系统开发定制 定制网站 定制开发 crm开发定制 开发公司 小程序开发定制 定制软件 收款定制开发 企业网站定制开发 定制化开发 android系统定制开发 定制小程序开发费用 定制设计 专注app软件定制开发 软件开发定制定制 知名网站建设定制 软件定制开发供应商 应用系统定制开发 软件系统定制开发 企业管理系统定制开发 系统定制开发