使用Angular 2将URL参数发送到Express

时间:2016-11-30 15:54:36

标签: express angular url-parameters

我正在使用此Angular服务从Express获取数据:

getRestaurants(districtId) : Observable<void[]>{
  let params: URLSearchParams = new URLSearchParams();
  params.set('id', districtId);

  return this.http.get(this.url, { search: params })
  .map((res:Response) => res.json())
  .catch((error:any) => Observable.throw(error.json().error || 'Server error'));
}

我使用的是此网址http://localhost:5050/api/district/restaurants?id=8

如果在Express中使用req.query,它可以正常工作但我需要在Express中使用这个新网址http://localhost:5050/api/district/:id/restaurants并使用req.params

我的问题是我无法在不修改URL字符串的情况下使用Angular设置:id参数,我认为有更好的方法来执行此任务。谢谢你的帮助

1 个答案:

答案 0 :(得分:0)

这个怎么样:

private url = 'http://localhost:5050/api/district/:id/restaurants';

private _prepareUrl(districtId: number): string {
   return this.url.replace(':id', districtId);
}

getRestaurants(districtId) {
   // ...

   this.http.get(this._prepareUrl(districtId), ...);

   // ...
}

你可以使用Router的函数createUrlTree,但你也会有一个准备函数..

private urlPrefix = 'http://localhost:5050/api';

constructor(private _router: Router) { }

private _prepareUrl(districtId: number): string {
   return this.urlPrefix + this._router.createUrlTree(['district', districtId, 'restaurants']).toString();
}

getRestaurants(districtId) {
   // ...

   this.http.get(this._prepareUrl(districtId), ...);

   // ...
}