2

我目前正在尝试使用 npm 请求模块发送一些请求。正常的回调变体工作得很好,但我不能用异步等待做同样的事情。

起初我试图用'request-promise-native'模块来做,但我什至无法运行一个正常的promise示例。

var request = require('request-promise-native');
request(login)
        .then(function (response) {
            console.log("Post succeeded with status %d", response.statusCode);})
        .catch(function (err) {
            console.log("Error");
        });

我不确定我做错了什么,但是调用了 .then 函数并且响应属性完全为空。如果我查看 webstorm 调试,我只会在该值中看到 giberisch -。截屏:

在此处输入图像描述

我的最终目标是像这样使用 npm 请求模块:

var 结果 = 等待请求(登录);

结果是响应或错误,如果这是不可能的,我也可以使用仅承诺变体。

有人可以告诉我我做错了什么或如何正确做吗?

问候鲁维

编辑:好的,我发现第一个问题是什么。我正在联系的服务器发送 gzip 信息,我需要将 gzip = true 放在我的选项对象中,现在我得到了一个可读的答案。但我的问题没有解决:

如果我使用:

req(login, function(error, response, body){
        if (error)
         console.log(error);

        console.log(body);
        console.log(response.statusCode);
    });

我得到了完整的请求和响应对象。从请求模块。如果我使用:

 var result = await req(login);

我得到了请求对象,但没有响应对象和响应标头信息。

这仅返回响应正文,仅填充一个变量:

request(login)
        .then(function (response, body) {
            console.log(response);})
        .catch(function (err) {
            console.log("Error");
        });

如何获得承诺并等待返回整个请求 + 响应对象?

4

1 回答 1

3

要获得完整的响应对象,您必须添加: resolveWithFullResponse=true 到您传递给请求函数的选项对象

如果您使用:

var request = require('request-promise-native');

var result = await request(login);
//or
request(login)
        .then(function (response, body) {
            console.log(response);})
        .catch(function (err) {
            console.log("Error");
        });

并且两者都可以正常工作并返回完整的请求/响应对象。

于 2018-02-06T15:38:34.360 回答