当前位置: 首页 > 知识库问答 >
问题:

Async/Await和http客户端请求出现问题

孔理
2023-03-14

不确定这里遗漏了什么,但console.log()行打印的是“promise{}”,而不是响应中的JSON正文。
我认为我在async/await中做错了什么。

我的代码(快速):

async function axiosPost(url, payload) {
   try {
      const res = await axios.post(url, payload);
      const data = await res.data;
      return data;
  } catch (error) {
      console.error(error);
  }
}

app.get('/data', (req, res) => {
    data = axiosPost('http://localhost:8080', {
        userpass: 'XXX',
        method: 'getdata'
     });
     console.log(data)
     res.status(200).send({
        message: data
    })
});

感谢任何帮助。

共有2个答案

仲孙凡
2023-03-14

得到这个结果是因为您没有解析axiospost()的调用,它是异步的。这可以通过两种方法来解决,一种是将.then()附加到AxiosPost()调用,或者使用Await关键字等待它。见下文:

null

async function axiosPost(url, payload) {
   try {
      const res = await axios.post(url, payload);
      const data = await res.data; // this is not required but you can leave as is
      return data;
  } catch (error) {
      console.error(error);
  }
}

// I converted the callback to an async function and
// also awaited the result from the call to axiosPost(),
// since that is an async function
app.get('/data', async (req, res) => {
    data = await axiosPost('http://localhost:8080', {
        userpass: 'XXX',
        method: 'getdata'
     });
     console.log(data)
     res.status(200).send({
        message: data
    })
});

// OR using `then()`

app.get('/data', (req, res) => {
    axiosPost('http://localhost:8080', {
        userpass: 'XXX',
        method: 'getdata'
     }).then((data) => {
      console.log(data);
      
      res.status(200).send({
        message: data
      });
    });
})
曹昊焱
2023-03-14

用这个替换路由器。在进行API调用时没有使用await。希望有帮助。

app.get('/data', async (req, res) => {
    let data = await axiosPost('http://localhost:8080', {
        userpass: 'XXX',
        method: 'getdata'
     });
     console.log(data)
     res.status(200).send({
        message: data
    })
});
 类似资料:
  • 当浏览器请求网页时,它会向 Web 服务器发送特定信息,这些信息不能被直接读取,因为这些信息是作为 HTTP 请求的头的一部分进行传输的。您可以查看 HTTP 协议 了解更多相关信息。 以下是来自于浏览器端的重要头信息,您可以在 Web 编程中频繁使用: 头信息 描述 Accept 这个头信息指定浏览器或其他客户端可以处理的 MIME 类型。值 image/png 或 image/jpeg 是最常

  • 如何恰当地做到这一点?也许我需要配置akka调度程序?

  • 客户端的HTTP/HTTPS请求。 进程:主进程​ ClientRequest是由EventEmitter来实现Writable Stream​ new ClientRequest(options) 作用:发起新的HTTP/HTTPS请求 options(Object | String) - options是String时即请求URL。 options 是Object时则按以下属性请求: meth

  • 我对监视应用程序使用的HTTP REST API很感兴趣。 使用spring boot、dropwizard和EnablePrometheUseEndpoint。我能够在prometheusendpoint上生成这样的prometheus指标: 我想在grafana中构建一个图形来显示对uri上GET方法的所有调用api_v1_objects不同的状态代码(每个状态代码一行)。 我应该将状态代码设

  • 本文向大家介绍vue如何使用async、await实现同步请求,包括了vue如何使用async、await实现同步请求的使用技巧和注意事项,需要的朋友参考一下 这篇文章主要介绍了vue如何使用async、await实现同步请求,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 以下是vue method的demo: 其中方法需要用async修饰, 然

  • 如何在基于网络的 HTTP 客户端中重试 HTTP 请求? 请考虑以下处理程序,如果收到 HTTP 响应代码 503,它将尝试在 1 秒后重试 HTTP 请求: 在本例中,当我写入通道时,管道中的其他处理程序会看到HttpObjects,但实际上不会再次执行HttpRequest——只接收到一个HttpResponse。 我认为在这种情况下我只是滥用了 Channel,我需要创建一个新的通道(表示