【问题标题】:How to get response from unirest nodejs POST call?如何从 unirest nodejs POST 调用中获得响应?
【发布时间】:2019-05-23 17:09:17
【问题描述】:

我已使用以下代码示例调用返回访问令牌的 API。

var responsedata = '';

unirest.post('http://sandbox.com/api/getToken')
  .headers({'Content-Type': 'application/x-www-form-urlencoded'})
  .send('apiKey=xewsdw232')
  .send('username=theuser')
  .end(function (response) {

    console.log(response.body);
    responsedata = response.body;
    
    
  });

console.log(responsedata);

回应

{ data: { token: 'JhbGciOiJIUzI1NiJ9',transID:'00582',errorCode: '00',errorMessage: '' } }

我确实得到了登录到控制台的响应,但无法将其分配给我可以在调用函数之外使用它的变量。我正在努力理解回调如何在 javascript 中工作。

【问题讨论】:

  • 请告诉我们您收到的回复。
  • 问题编辑包括响应日志
  • 您应该首先了解 Javascript 的工作原理。 JS 异步工作。您正在尝试在分配之前获得价值。
  • 我认为在你的代码中你会使用responsedata.data。您能否将代码发布到您尝试使用数据的位置,并说明什么不起作用?
  • 最后一行 console.log(responsedata) 记录空字符串。所以我猜变量 responsedata 没有得到 response.body 值

标签: javascript node.js unirest


【解决方案1】:

HTTP 请求本质上是异步的。您不会立即得到响应,这意味着 javascript 不会等待响应而是继续执行,并且每当返回响应时,都会调用回调。

如果要返回此响应,请将此代码封装在函数中并返回已解析的 Promise。

function getToken() {
  return new Promise((resolve, reject) => {
    unirest.post('http://sandbox.com/api/getToken')
      .headers({
        'Content-Type': 'application/x-www-form-urlencoded'
      })
      .send('apiKey=xewsdw232')
      .send('username=theuser')
      .end(function (response) {
        if (response.error) {
          return reject(response.error)
        }
        return resolve(response.body);
      });
  })
}
getToken().then((body) => console.log("success", body)).catch((error) => 
console.log("error", error))

【讨论】:

    【解决方案2】:

    JS 异步工作。您正试图在分配之前获得价值。检查这个例子。你正在提出要求。这需要时间,但您的程序不会停止。所以你不能在函数https://repl.it/repls/OutgoingFreshOutput

    之外获得价值

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-04-02
      • 2019-10-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-23
      相关资源
      最近更新 更多