如何评估来自服务器的 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 中间件时,它开始工作。最初的问题仍然是个谜。
我在服务器端获取数据并将结果推送到全局变量,然后使用 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 中间件时,它开始工作。最初的问题仍然是个谜。