web-dev-qa-db-fra.com

Comment ajouter un en-tête supplémentaire pour poster une demande avec vue-resource?

J'ai un certain nombre de demandes de publication dans mon application. Certains d'entre eux doivent avoir et extraire l'en-tête avec token Je ne sais pas comment l'ajouter

Jusqu'à présent, mon code est comme ça. Je vérifie s'il y a un jeton et quand l'ajouter aux en-têtes et après cela, je fais une demande de publication avec la méthode de publication vue-resource.

let headers = new Headers({'Content-Type': 'application/json;charset=utf-8'});

 if(token !== '') {
    headers.append('TOKEN', token);
  }

  return this.http.post(uri, data, headers)
         .then(this.extractData)
         .catch(this.handleError);

Mais cela n'ajoute pas TOKEN

Qu'est-ce que ça marche

this.http.interceptors.Push(function(request) {
                request.headers.set('TOKEN', token);
            });

à la place de headers.append('TOKEN', token);

Mais pour une raison quelconque, il pousse l'en-tête TOKEN non pas pour certaines requêtes mais pour toutes.

Donc, lorsque je fais une demande avec un jeton - cela fonctionne bien, après cela, je fais une demande sans jeton, mais il l'ajoute toujours.

Quelqu'un sait quel est le meilleur moyen de résoudre ce problème?

UPD Si je console.log(headers.get('TOKEN')) tout en faisant headers.append('TOKEN', token); cela me donne la bonne valeur. Donc, je suppose que la demande de publication elle-même est appelée avec de mauvais en-têtes.

5
Allan

Dans document , headers devrait être un objet Javascript normal, pas window.Headers

S'il vous plaît essayez

  let headers = {
    'Content-Type': 'application/json;charset=utf-8'
  };

  if(token !== '') {
    headers['TOKEN'] = token
  }

  return this.http.post(uri, data, {headers})
         .then(this.extractData)
         .catch(this.handleError);
4
ittus

Ok, je pense que je l'ai compris. Merci au commentaire de @ ssc-hrep3 et à la réponse de @ittus

let headers = {
        'Content-Type': 'application/json;charset=utf-8'
      };

      if(token !== '') {
        headers['TOKEN'] = token
      }

      return this.http.post(uri, data, {headers: headers})
             .then(this.extractData)
             .catch(this.handleError);
1
Allan