首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >URLSearchParams不是构造函数

URLSearchParams不是构造函数
EN

Stack Overflow用户
提问于 2019-02-10 05:05:30
回答 2查看 3.2K关注 0票数 1

我有一个Angular Service,我尝试发送一个HTTP Post请求并将Content-Type标头设置为application/x-www-form-urlencoded

代码如下:

代码语言:javascript
复制
import { HttpClient, HttpHeaders } from '@angular/common/http';
export class UserService {
    constructor(private http:HttpClient, private bodyParser:BodyParserService{}

    public login(username:String, password:String){
        let body = this.bodyParser.parseBody({username: username, password: password})
        const options = {
            headers: new HttpHeaders({'Content-Type': 'application/x-www-form-urlencoded'})

        };
         this.http.post(`${environment.apiUrl}/login`, body, options)
        .subscribe((response:any) => {
           console.log("Response", response);
        })
    }

}

我正在使用Angular7。我使用Chrome浏览器,但问题在FireFox上仍然存在

我得到以下错误:

代码语言:javascript
复制
ERROR TypeError: url__WEBPACK_IMPORTED_MODULE_2__.URLSearchParams is not a constructor
at BodyParserService.push../src/app/services/body-parser.service.ts.BodyParserService.parseBody (body-parser.service.ts:12)
at UserService.push../src/app/services/user-service.service.ts.UserService.login (user-service.service.ts:21)
at LoginModalComponent.push../src/app/nav-bar/nav-bar.component.ts.LoginModalComponent.login (nav-bar.component.ts:50)
at Object.eval [as handleEvent] (LoginModalComponent.html:19)
at handleEvent (core.js:19545)
at callWithDebugContext (core.js:20639)
at Object.debugHandleEvent [as handleEvent] (core.js:20342)
at dispatchEvent (core.js:16994)
at core.js:17441
at HTMLButtonElement.<anonymous> (platform-browser.js:993)

我已经确认,我已经导入了HttpClientModule

bodyParser服务:

代码语言:javascript
复制
import { Injectable } from '@angular/core';
import { URLSearchParams } from 'url';

@Injectable({
  providedIn: 'root'
})
export class BodyParserService {

   constructor() { }

  public parseBody(bodyObject: Object): string {
    const body = new URLSearchParams();
    Object.keys(bodyObject).forEach(key => {
      body.set(key.toString(), bodyObject[key]);
    });
    return body.toString();
  }
}

好吧,我发现了我的错误: URLSearchParams似乎被弃用了。我现在使用的是HttpParams:

代码语言:javascript
复制
const body = new HttpParams();
EN

回答 2

Stack Overflow用户

发布于 2019-06-10 09:39:59

URLSearchParams已弃用,您必须使用HttpParams。例如

代码语言:javascript
复制
let params = new HttpParams()
  .set('grant_type', 'password')
  .set('username', username)
  .set('password', password);

params.toString();
票数 3
EN

Stack Overflow用户

发布于 2019-02-10 05:33:06

我已经在答案中添加了正确的解决方案。URLSearchParams似乎已被弃用。所以我换成了HttpParams,它似乎工作得无懈可击

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54610734

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档