我整理了以下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://%5bNo%20Host%5d/CatalogServices/product/nvalue/v1_0?", is invalid.<p>
Reference #9.1b7f1cb8.1503983750.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错误返回给我?
答案 0 :(得分:0)
{
"/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参数中删除尾部斜杠?