http请求可在邮递员中工作,但不能在浏览器中工作

时间:2019-09-01 20:13:10

标签: http browser get request postman

我能够发送邮件并从邮递员那里获取请求,但是当我实际从浏览器发送该请求时,它无法获取记录,并且在控制台中显示错误“ body:{错误:“未找到集合'undefined'””} “。

尝试了Get和Post请求,它们都在POSTMAN中提供响应数据,但是在浏览器中不起作用。显示错误“ body:{错误:“未找到集合'undefined'”“}”。 在不同地方的同一项目中,我还使用了内存数据库,我可以向该数据库发出/ GETRequest并接收响应的数据。

homepage.ts:=============
public AllItem: AllItems[] ;
getAllItems(): void {
    console.log('AA');
    this.itemService.getAllItems() //(this.AllItems)
      .subscribe(AllItem => this.AllItem = AllItem  );
      console.log(this.AllItem);
      console.log('EE');
  }

item.Service.ts:===============
private itemsUrl = 'api/items';  // URL to web api
private allItemsUrl = 'http://*************.azurewebsites.net/items';
getAllItems(): Observable<AllItems[]>{ 
console.log('CC');  
    return this.http.get<AllItems[]>(this.allItemsUrl)
    .pipe(
      tap(_ => this.log('fetched heroes')),
      catchError(this.handleError<AllItems[]>('getHeroes', []))
    );
}

// this get request work properly and gives response data from in-memoery-db
getItems(): Observable<Item[]> {
 return this.http.get<Item[]>(this.itemsUrl)
 .pipe(
      tap(_ => this.log('fetched heroes')),
      catchError(this.handleError<Item[]>('getHeroes', []))
    );
}

in POSTMAN it gives data as
{
    "items": [
        {
            "category": "Drink",
            "item": "Coffee",
            "price": "5$"
        }]
}

in Browser console
core.js:15724 ERROR 
body: {…}, url: "http://**********.azurewebsites.net/items", headers: HttpHeaders, status: 404, statusText: "Not Found"}
body: {error: "Collection 'undefined' not found"}
headers: HttpHeaders {normalizedNames: Map(0), lazyUpdate: null, lazyInit: ƒ}
status: 404
statusText: "Not Found"
url: "http://*************.azurewebsites.net/items"
__proto__: Object

1 个答案:

答案 0 :(得分:0)

为此找到了解决方案,实际上我在同一项目的其他一些地方使用了in-memory-web-api, 未找到收集错误,表明您之前使用过angular-in-memory-web-api。您需要从项目中删除与此相关的所有内容,以便能够使用外部api和db。

“ InMemoryWebApiModule.forRoot(InMemoryDataService)” Angular in-memory-web-api,它替换了HttpClient模块的HttpBackend SO,因此在使用实际服务器和数据库之前,需要先将其删除

此后,我遇到另一个问题,即对预检请求的响应未通过访问控制检查:所请求的资源上没有“ Access-Control-Allow-Origin”标头。

为此,我们需要在Azure的节点服务器中使用following。 var cors = require('cors'); app.use(cors({origin:'*'}));