如何评估来自服务器的 API 响应并在客户端使用 Fetch() 和 Node.js 采取相应行动

How to evaluate API response from server and act accordingly at client side using Fetch() and Node.js

我在服务器端获取数据并将结果推送到全局变量,然后使用 Express.js 使用 app.post 方法将该全局变量发送到客户端。我的问题是客户端在没有先从 API 接收到数据的情况下过早地获取全局变量。我如何评估响应,以便客户端在显示任何内容之前先等待全局变量接收数据。

服务器端,代码如下所示:

let sharpe = ''
app.post('/api', async(req, res, next) => {
  console.log('I got a request!')
  thisOne = req.body.stock1
  thisOne2 = req.body.stock2

  var result = await setup();

  res.json({
    status: 'success',
    stocks: sharpe
  });

})

Sharpe 是存储来自多个 API 调用的响应的全局变量,并且是应该发送回客户端的变量。客户端代码是这样的:

  const sendData =  async (event) => {
    event.preventDefault();
    var stock1 = document.getElementById('weight1').value
    var stock2 = document.getElementById('weight2').value

    const data = {stock1, stock2};
    const options = {
      method: 'POST',
      body: JSON.stringify(data),
      headers: {'Content-Type': 'application/json' }
    }

    fetch('/api', options).then(res => res.json()).then(res => {

      console.log(res.stocks);

    })
  

}

结果,SendData() 函数获取了此时为空的 sharpe 变量。如何调整客户端等待正确响应的客户端代码或服务器端代码?谢谢

一种解决方案是将 API 结果存储到数据库中,客户端将获取现成的数据流,但是否有更直接的解决方案?

要等待您的 API 服务器设置 sharpe 参数,需要等待,您已经这样做了。这取决于填充 sharpe 参数的设置函数(例如 setup())。它必须 return 一个承诺,一旦 sharpe 填满数据,该承诺就会得到解决。

let sharpe = ''

async setup() {
  return new Promise((resolve, reject) => {
    sharpe = 'test';
    // set value for sharpe
    resolve()
  })
}


app.post('/api', async(req, res, next) => {
  console.log('I got a request!')
  thisOne = req.body.stock1
  thisOne2 = req.body.stock2

  var result = await setup();

  res.json({
    status: 'success',
    stocks: sharpe
  });

})

最终,当我使用承诺链将所有 API 调用推送到服务器端的 app.post 中间件时,它开始工作。最初的问题仍然是个谜。