web-dev-qa-db-fra.com

L'accès aux en-têtes dans request-promise obtient une réponse

Je suis un débutant au monde JS. J'essaie d'écrire un scénario de test qui teste les actions de l'utilisateur sur un site. J'utilise le module request-promise pour tester les appels asyn. Je n'ai pas trouvé de documentation api pour request-promise. Comment puis-je accéder au code d’état de la réponse? À l'heure actuelle, il imprime non défini. En outre, quelqu'un peut-il confirmer, comment pouvons-nous savoir quelle promesse retourne quand elle réussit? S'agit-il d'une valeur unique résolue ou de tous les paramètres renvoyés par la fonction asynchrone? Comment savons-nous quels sont les paramètres de function () dans request.get(base_url).then(function(response, body)

var request = require("request-promise");
var promise = require("bluebird");
//
var base_url = "https://mysignin.com/"
//
describe("My first test", function() {
 it("User is on the sign in page", function(done) {
    request.get(base_url).then(function(response, body){
     // expect(response.statusCode).toBe('GET /200');
      console.log("respnse " + response.statusCode);
      console.log("Body " + body);
      done();
    }).catch(function(error) {
        done("Oops somthing went wrong!!");
    });
 });
});
16
learningtocode

Par défaut, la bibliothèque request-promise ne renvoie que la réponse elle-même. Vous pouvez cependant passer une fonction de transformation simple dans vos options, qui prend trois paramètres et vous permet de retourner des éléments supplémentaires.

Donc, si je voulais que les en-têtes et la réponse me soient renvoyés, je voudrais simplement faire ceci:

var request = require('request-promise');
var uri = 'http://domain.name/';

var _include_headers = function(body, response, resolveWithFullResponse) {
  return {'headers': response.headers, 'data': body};
};

var options = {
  method: 'GET',
  uri: uri,
  json: true,
  transform: _include_headers,
}

return request(options)
.then(function(response) {
  console.log(response.headers);
  console.log(response.data);
});

J'espère que cela pourra aider.

38
Rob Bailey
var request = require('request-promise');

request.get('someUrl').then(function(body) {
  // body is html or json or whatever the server responds
});

request({
  uri: 'someUrl',
  method: 'GET',
  resolveWithFullResponse: true
}).then(function(response) {
  // now you got the full response with codes etc...
});
18
Masterakos

Il suffit de passer resolveWithFullResponse: true avec les options get pour récupérer les en-têtes de réponse.

3
thilak

La réponse de Tsalikidis est correcte. Pour ce qui est de:

En outre, quelqu'un peut-il confirmer, comment pouvons-nous savoir quelle promesse est retournée? quand il réussit, est-ce une valeur unique qu'il résout ou tout les paramètres renvoyés par la fonction asynchrone

Une promesse (conforme à la promesse/A +) renvoie toujours une valeur unique. Bien entendu, cette valeur peut être un objet profondément imbriqué contenant des tonnes d'informations. Mais .then(function(response,body){ est intrinsèquement faux.

Une bibliothèque qui renvoie une promesse doit documenter le format de l'objet renvoyé. 

0
solendil