проблема в параметрах запроса в angular 8 - PullRequest
0 голосов
/ 18 февраля 2020

У меня проблема с параметрами запроса в angular 8. Это код:

headers = {
        headers: new HttpHeaders({
            'Content-Type' : 'application/json',
            'Accept': 'application/json'
        })
    };

login(username, password) {

        console.log('login');

        let params = new HttpParams();
        params = params.append('username', username);
        params = params.append('password', password);
        let options = { headers: this.headers, params: params };

        return this.http.post<any>(this.host + 'login', options).pipe(map(data => {

                console.table(data);
                this.setSession(data);
                this.currentUserSubject.next(data.user);

            }));

    }

Я также пытался

let params = new HttpParams();
params = params.set('username', username);
params = params.set('password', password);

и

let params = new HttpParams().set('username', username).set('password', password);

и

let params = new HttpParams().append('username', username).append('password', password);

Внутренний сервер получает имя пользователя и пароль как неопределенные, ранее у меня был этот код, который работал правильно:

 login(username, password) {

    console.log('login');

    return this.http.post<any>('http://localhost:8080/login?username='+username+'&password='+password, 
        {headers:{
            'Content-Type' : 'application/json',
            'Accept': 'application/json'}} 
    ).pipe(map(data => {

        this.setSession(data);
        this.currentUserSubject.next(data.user);

    }));

}

Что не так? Спасибо

Ответы [ 4 ]

2 голосов
/ 18 февраля 2020

Вы публикуете опции как тело. Третьим параметром http.post должны быть параметры:

let params = new HttpParams();
params = params.append('username', username);
params = params.append('password', password);

const options = { headers: this.headers, params: params };

return this.http.post<any>(this.host + 'login', null, options);

Почему это сообщение, если тела нет? Разве GET не имеет больше смысла?

0 голосов
/ 18 февраля 2020

Попробуйте отправить js объект после URL. Например:

Let obj = {username: "username", password: "password"};

this.http.post ("your url here", obj) .subscribe (ваш функция стрелки здесь);

Удачи!

0 голосов
/ 18 февраля 2020

Вам следует использовать метод http.get (), если тела нет (т. Е. Вам нужно изменить метод запроса из post, чтобы получить его в бэкэнде).

 return this.http.get<any>(this.host + 'login', options).pipe(map(data => {

            console.table(data);
            this.setSession(data);
            this.currentUserSubject.next(data.user);

        }));

или если вы хотите использовать post метод затем использовать как (но это не очень хорошая практика.)

return this.http.post<any>(this.host + 'login', {},options).pipe(map(data => {

        console.table(data);
        this.setSession(data);
        this.currentUserSubject.next(data.user);

    }));
0 голосов
/ 18 февраля 2020

Я бы написал так:

const options = {headers: this.headers, params: {username, password}};
this.http.post<any>(this.host + 'login', null, options);

Вам нужно изменить объект заголовка, нет необходимости в обертке HttpHeader вокруг него

headers = {
    'Content-Type' : 'application/json',
    'Accept': 'application/json'
};

Кстати: если ваш дон отправить тело, возможно, переоценить необходимость отправки запроса

...