这个proxy.config有什么问题:Angular 2

时间:2017-08-29 05:21:08

标签: angular reverse-proxy

我整理了以下proxy.config.json

{
  "/api/" {
    "target": "http://m.lowes.com/CatalogServices/product/nvalue/v1_0?nValue=4294857975&maxResults=6&showURL=1&rollUpVariants=1&showUrl=true&storeNumber=0595&priceFlag=rangeBalance&showMarketingBullets=1",
    "secure":false,
    "logLevel":"debug"
   }
}

这只是一个后端可用于获取静态产品列表。

我正在运行以下服务来获取此JSON:

getProductData(){
    return this.http.get('/api/')
}

我有一位超级直接订阅者来检查数据:

this.productServ.getProductData().subscribe(
  ( data ) => {console.log( data)},
  (err) => console.log(err)
 );
}

我的npm脚本是:

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

但我收到以下错误:

ok: false
status: 400
statusText: "Bad Request"
type:2
url: "http://localhost:4200/api/
_body: "<HTML><HEAD>
<TITLE>Invalid URL</TITLE>
</HEAD><BODY>
<H1>Invalid URL</H1>
The requested URL
"http&#58;&#47;&#47;&#37;5bNo&#37;20Host&#37;5d&#47;CatalogServices&#47;product&#47;nvalue&#47;v1&#95;0&#63;", is invalid.<p>
Reference&#32;&#35;9&#46;1b7f1cb8&#46;1503983750&#46;cebb18
</BODY></HTML>

另外如果我在PostMan中运行get,我会得到预期的JSON。所以我知道网址很好。

跟随其他代理帖子到这封信,仍然无处可去。尝试搞乱一些并且没有走得太远。我有一种感觉,我做的很小,但我只是没有看到它。建议?

编辑:

我几乎忘了提到我在控制台中收到以下内容:

[HPM] GET /api/ -> http://m.lowes.com/CatalogServices/product/nvalue/v1_0?nValue=4294857975&maxResults=6&showURL=1&rollUpVariants=1&showUrl=true&storeNumber=0595&priceFlag=rangeBalance&showMarketingBul
lets=1

我是否认为这意味着我找到了网址?如果是这样,为什么我会将400错误返回给我?

1 个答案:

答案 0 :(得分:0)

发现大部分问题。以下是解决400个无效网址问题的解决方案:

{
  "/api": {
    "target": "http://m.lowes.com/CatalogServices/product/nvalue",
    "pathRewrite": {
       "^/api/":""
    },
    "changeOrigin": true,
    "secure":false,
    "logLevel":"debug",
    "headers": {"host": "http://www.localhost:4200"}
  }
}

注意我删除了搜索参数。我在http。

的选项中将这些添加为urlSearchParameters

然而,这会产生一个新问题:

网址要求没有尾部斜杠。无论是谁构建了这个服务都没有写任何东西来去除尾部斜杠,所以它将1的布尔值解析为1 /。这种抛出和错误基本上说它不知道如何处理这个无效的选项。

有没有办法去除这个尾随斜线?这是在看起来像http的调用中发生的,因为我在没有尾部斜杠的情况下传递参数。 Angular似乎在最后添加了自己的斜杠。这完全违背了我的意愿。

当http类决定发送我的请求时,任何人都知道如何从url参数中删除尾部斜杠?