在发布请求时设置标题-角度

时间:2019-12-18 13:58:37

标签: javascript angular typescript post request-headers

我在这样的角度服务部门发布了方法AuthService.ts

@Injectable({
    providedIn: 'root'
})
export class AuthService {
    ...
    ...
    login(username: string, password: string) {
        let headers = new Headers(); //1 
        headers.append('username', username); //2
        let options = {
            headers: headers
        }; //3

        return this.http.post < any > (`${environment.authBaseUrl}`, {
                username,
                password
            }, options) //4
            .pipe(map(user => {
                if (user && user.token) {
                    localStorage.setItem('currentUser', JSON.stringify(user));
                    this.currentUserSubject.next(user);
                }

                return user;
            }));
    }
}

我的目的是在POST请求标头中添加用户名。原因是在API中,期望在请求标头中找到用户名。在this post in StackOverflow的帮助下,我试图添加标题(从注释1到4)。我收到以下错误消息-

  

TS2345:   类型参数'{header:Headers; }'不能分配给类型参数'{header?:HttpHeaders | {[[header:string]:串[]; };观察?:“身体”;参数?:Ht ...'。   属性“标题”的类型不兼容。   类型'Header'不可分配给类型'HttpHeaders'| {[[header:string]:string串[]; }'。   类型“标头”不能分配给类型“ {{[标头:字符串]:字符串|串[]; }'。   索引签名缺少``标题''类型。

如果我从post方法中删除了option,那么一切都会正常。 有人可以帮我吗?

预先感谢

2 个答案:

答案 0 :(得分:2)

考虑使用HttpHeaders

例如:

(出于示例目的,我只放置了application/json内容类型标题)。


import { HttpHeaders } from '@angular/common/http';
[...]

const httpOptions = {
  headers: new HttpHeaders({ 'Content-Type': 'application/json', 'username': username)
};
[...]

return this.http.post<any>(`${environment.authBaseUrl}`, { username, password }, httpOptions) //4
  .pipe(map(user => {
    if (user && user.token) {
      localStorage.setItem('currentUser', JSON.stringify(user));
      this.currentUserSubject.next(user);
    }

    return user;
  }));

答案 1 :(得分:2)

使用HttpHeaders代替Headers

import { HttpHeaders } from '@angular/common/http';

let options = {
  headers: new HttpHeaders({ 'username': username })
}