访问请求承诺中的标头获取响应

时间:2016-08-30 18:10:04

标签: javascript promise

我是JS世界的新手。我正在尝试编写一个测试用户在网站上的操作的测试用例。我正在使用request-promise模块来测试asyn调用。我找不到任何api文档请求承诺。 如何访问响应的状态代码?现在它打印undefined。此外,任何人都可以确认,我们如何知道什么承诺成功后返回,它是一个单独的值,它解析为或异步函数返回的所有参数。我们如何知道request.get(base_url).then(function(response, body)中function()的参数是什么。

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

4 个答案:

答案 0 :(得分:41)

默认情况下,请求承诺库仅返回响应本身。但是,您可以在选项中传递一个简单的变换函数,该函数有三个参数并允许您返回其他内容。

因此,如果我希望标题和响应返回给我,我会这样做:

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

希望有所帮助。

答案 1 :(得分:21)

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

答案 2 :(得分:3)

只需在get选项中传递{{1}}即可获取响应标头。

答案 3 :(得分:0)

Tsalikidis的回答是正确的。 至于:

  

此外,任何人都可以确认,我们如何知道承诺的回报   当它成功时,它是一个单独的值,它解析为或全部   async函数返回的参数

承诺(承诺/ A +兼容)始终返回单个值。当然,这个值可以是一个深度嵌套的对象,其中包含大量信息。但.then(function(response,body){本质上是错误的。

发回一个promise的库应该记录返回对象的格式。