URLSearchParams附加额外&到url参数Angular2 + Ionic2

时间:2017-02-10 23:20:48

标签: javascript angular ionic2

所以,这是我关于stackoverflow的第一篇文章,所以请原谅我,如果我没有那么努力地搜索,但是...

我正在我们的公司Ionic2 + Angular2 App上构建一个简单的登录页面。登录表单对我们的后端进行http调用,如果用户的凭据正确,则使用用户的凭据进行响应,然后允许用户进入主页,否则会收到401错误。

昨晚,当我在Windows机器上完成布线时,一切都很完美。但是在工作中我们使用Mac,因此当我ionic run android和/或ionic serve --lab时,api调用没有正确附加参数。显示:

private theUrl = 'http://theurl.com/mobileapi/getUser.cfm?';

public onlogin(email: string, password: string) {
  let params: URLSearchParams = new URLSearchParams();
    params.set('email', email);
    params.set('password', password);

  return this.http.get(this.theUrl, { search: params })
    .map(res => res.json())
}

此代码使用URLSearchParams设置URL参数,然后将它们作为选项直接传递到http.get()请求中。 - 我们从前端角形式传递电子邮件和密码。

现在,当应用程序被提供/运行时,API调用最终看起来像这样:

http://theurl.com/mobileapi/getUser.cfm?&email=xxxx&password=xxxxx

我感兴趣的是网址的 .cfm?& 部分。我知道它不应该像电话那样被格式化......我在这里错过了一些东西来正确地格式化url params吗?

由于

1 个答案:

答案 0 :(得分:0)

因为您的网址有? - > private theUrl = 'http://theurl.com/mobileapi/getUser.cfm?';因此,当Angular构建params时,它会标记为有param,然后这会在你得到的时候附加url。

使用此代替:

private theUrl = 'http://theurl.com/mobileapi/getUser.cfm';

从此代码中了解更多信息:

if (search.length > 0) {
  let prefix = '?';
  if (this.url.indexOf('?') != -1) {
    prefix = (this.url[this.url.length - 1] == '&') ? '' : '&';
  }
  // TODO: just delete search-query-looking string in url?
  this.url = url + prefix + search;
}

https://github.com/angular/angular/blob/2.4.7/modules/%40angular/http/src/static_request.ts#L81-L88