我正在尝试发出一个请求,然后使用接收到的数据将其传递给另一个将数据附加到URL的请求。
我试图在路由下面创建一个函数,然后在路由内部调用该函数,但这没用。
const express = require('express');
const router = express.Router();
const fetch = require('node-fetch');
let accId;
router.get('/:platform/:name', async (req, res) => {
try {
const headers = {
'X-Riot-Token': process.env.TRACKER_API_KEY
}
const { platform, name } = req.params;
const response = await fetch(`https://euw1.api.riotgames.com/lol/summoner/v4/summoners/by-name/${name}`, {
headers
});
const data = await response.json();
if(data.errors && data.errors.length > 0) {
return res.status(404).json({
message: 'No summoner found'
})
}
res.json(data);
accId = data.accountId;
} catch (error) {
console.error(error);
res.status(500).json({
message: 'Server Error'
})
}
});
module.exports = router;
在哪里看到变量accId,我想将其添加到URL,然后发出另一个请求。任何指针都很好,谢谢..
答案 0 :(得分:1)
您无法发送第二个请求,因为您之前发送的响应是res.json(data)
。
我可以通过将数据传递到另一个端点来解决此问题。将数据添加到req.locals
req.locals.data = data;
然后重定向到您的另一个端点,您可以在其中处理第二个请求:
res.redirect(/other/endpoint);
在另一个端点中,您可以在处理accountId情况后将两个结果一起发送。
app.get(/other/endpoint, (req, res) => {
res.send({ data: req.locals.data, accIdResult: doSomething(req.locals.data. accountId)});
});
答案 1 :(得分:0)
您可以通过使用超级代理来解决此问题。您可以使用异步等待或使用Promise。
const sa = require('superagent');
router.get('/:platform/:name', async (req, res) => {
const url = 'YOUR_URL_ONE';
const anotherUrl = 'YOUR_URL_Two';
//Promisified request object
const reqOne = sa.get(url).set('X-Riot-Token', 'process.env.TRACKER_API_KEY');
return reqOne.then((data) => {
// do whatever you want with data then call another url, you can change the mothod to post or put as well
const reqTwo = sa.post(anotherUrl).set('X-Riot-Token', 'process.env.TRACKER_API_KEY').send(data);;
return reqTwo;
}).then((data)=>{
return res.json(data);
}).catch(()=>{
// handle expection
});
});
module.exports = router;