Доступ к заголовкам в запросе-обещании

Я полный новичок в мире JS. Я пытаюсь написать тестовый пример, который проверяет действия пользователя на сайте. Я использую модуль request-prom для тестирования вызовов asyn. Я не мог найти документацию api для запроса-обещания. Как получить доступ к коду статуса ответа? Сейчас он печатает undefined. Кроме того, кто-нибудь может подтвердить, как мы узнаем, какое обещание вернется, когда оно будет успешным, - это единственное значение, которое оно разрешает или все параметры, возвращаемые функцией async. Как узнать, каковы параметры функции() в 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!!");
    });
 });
});

Ответ 1

По умолчанию библиотека запросов-обещаний возвращает только сам ответ. Тем не менее, вы можете передать простую функцию преобразования в свои параметры, которая принимает три параметра и позволяет вам возвращать дополнительные данные.

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

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);
});

Надеюсь, что это поможет.

Ответ 2

По умолчанию request-promise возвращает только тело ответа от запроса. Чтобы получить полный объект ответа, вы можете установить resolveWithFulLResponse: true в объекте параметров при выполнении запроса. Пример в документах

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...
});

Ответ 3

Просто передавая resolveWithFullResponse: true с опциями get, следует получить заголовки ответа.

Ответ 4

Ответ Tsalikidis правильный. Что касается:

Кроме того, кто-нибудь может подтвердить, как мы узнаем, какое обещание возвращается когда это будет успешным, это единственное значение, которое оно разрешает или все параметры, которые функция async возвращает

Обещание (Promise/A + compliant) всегда возвращает одно значение. Конечно, это значение может быть глубоко вложенным объектом с тоннами информации в нем. Но .then(function(response,body){ по своей сути ошибочен.

Библиотека, которая отправляет обещание, должна документировать формат возвращаемого объекта.