首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Node.js http请求返回正文/msg空

Node.js http请求返回正文/msg空
EN

Stack Overflow用户
提问于 2019-01-02 18:30:57
回答 2查看 639关注 0票数 0

我试图使用requestjs包发布数据并等待响应。但我对身体的反应总是不明确。

代码语言:javascript
复制
var request = require('request');

request({
      method: "POST",
      baseUrl: "https://255.255.255",
      uri: "/login",
form: { 
      username: "username",
      password: "password",
      autologin: "true"}},
function(body, msg, err){ 
      console.log(body); console.log(msg); 
})

编辑:同样,未定义的主体是由隐私策略造成的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-01-02 19:20:19

我想你被“承诺”和“不承诺”请求包搞混了。正如您的示例所示,$ajax返回Promiseified,直接从ajax请求的响应中获取数据。您期望request包也会直接提供数据,这是不正确的。

实际上,你可以用两种方式解决你的问题:

Sol.1:使用适当的回调函数参数,您必须在回调函数的第三个参数中获取数据。例如:

代码语言:javascript
复制
var request = require('request');

request({
    method: "POST",
    baseUrl: "https://255.255.255",
    uri: "/login",
    form: {
      username: "username",
      password: "password",
      autologin: "true"
    }
  },
  function (error, httpResponse, body) {
    if (error) {
      console.error(error);
    }
    console.log(httpResponse.statusCode);
    console.log(body);
  });

Sol.2:使用request-promise NPM包(从这里下载)并获得pomisified。例如:

代码语言:javascript
复制
var request = require('request-promise');

const getData = async () => {
  return new Promise((resolve, reject) => {
    const options = {
      method: "POST",
      baseUrl: "https://255.255.255",
      uri: "/login",
      form: {
        username: "username",
        password: "password",
        autologin: "true",
        resolveWithFullResponse: true, // Returns full response. To get only data don't use this property or mark it false.
      }
    };

    // Get whole Response object.
    const response = await request(options);

    // Returns the Promise.Resolve or Reject based on response.
    if (response.statusCode < 200 || response.statusCode > 300) {
      const errorMsg = 'Error occurred while POSTing the request. Got status: ' + response.status;
      console.error(errorMsg);

      // Reject the promise. Should be caught.
      return reject(errorMsg);
    }

    const responseBody = response.body;
    console.log(responseBody);

    // Return the response.
    return resolve(responseBody);
  })
}

上面的实现将返回正在调用的方法getData()的承诺。

注意:如果在 JSON对象中使用resolveWithFullResponse: true,,语句const response = await request(options);将返回完整的响应对象。如果只需要响应体或数据,则不要在选项中提及resolveWithFullResponse属性,也不要向其分配值false。默认情况下,resolveWithFullResponse的值为false。

票数 1
EN

Stack Overflow用户

发布于 2019-01-02 18:48:19

回调的格式是(err,response,body);也许这就是为什么您要得到一个空的主体和响应。你可以参考这里的细节。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54011397

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档