gpt4 book ai didi

node.js - Node - 调用 ExpressJS 路由,并且需要对其中的 API 执行 GET 请求

转载 作者:太空宇宙 更新时间:2023-11-03 23:47:44 29 4
gpt4 key购买 nike

我正在为一个项目制作一个加密货币仪表板,而且我对 Node 和 Express 完全陌生。这就是我目前拥有的

app.get('/search', function(req,res){
res.writeHead(200, {'Content-Type': 'text/html'});
res.write(req.url);
data = []
var options = {
"method": "GET",
"hostname": "rest.coinapi.io",
"path": "/v1/assets",
"headers": {'X-CoinAPI-Key': 'MY_API_KEY_HERE'}
};

const request = https.request(options, (data, response) => {
response.on('data', d => {
data.push(d);
})
});
console.log(data);
request.end();
res.end();
})

这个想法是在我的前端,我有一个按钮,单击该按钮时,将向 CoinAPI api 发出请求,获取所有报告的 Assets 和当前值。我不太确定应该如何将该响应数据作为响应发送回我的前端。因此,我尝试从 https.request 行返回的 JSON 中提取响应数据。我有一个数据数组data = [],正如您在代码顶部看到的那样。

我最初的请求设置如下:

const request = https.request(options, response => { 

但是当我尝试将 d 推送到 data 时,我控制台记录了数据并且数据数组为空。这是有道理的,data 数组超出了请求函数的范围,因此数据不会更新。但是当我尝试将data传递到函数中时,我出错了。

基本上,我希望能够在向 CoinAPI 发出请求后将 JSON 数据发送回我的前端。如果我在 https.request 回调中执行 process.stdout.write(d),我实际上会看到 coinapi 数据返回。我只是不知道如何将其发送到前端作为我的响应的一部分。

最佳答案

问题:

  • (data, response) 的使用不正确。第一个也是唯一的参数是 response,因此应该是 (response)

  • on('data') 事件接收缓冲数据。标准用法是将其连接到最终字符串,而不是附加数组。

  • 您缺少一个 on('end'),您应该使用它来输出最终数据或进行任何处理。

  • 使用 res.write 您将发送 text/html 内容类型和一些您不想要的内容(如果目标是输出前端可以解析和使用的 JSON)。

  • 缺少 API 调用的错误处理程序。

完整更新的代码:

app.get('/search', function(req,res){
let str = '';
const options = {
"method": "GET",
"hostname": "rest.coinapi.io",
"path": "/v1/assets",
"headers": {'X-CoinAPI-Key': 'MY_API_KEY_HERE'}
};

const request = https.request(options, (response) => {
response.on('data', d => {
str += d;
});
response.on('end', () => {
try {
let obj = JSON.parse(str);
// do any manipulation here
res.json(obj);
} catch(e){
console.log(e);
res.status(500).json({ message: 'Something went wrong - parse error' });
}
});
});
request.end();

request.on('error', (e) => {
console.log(e);
res.status(500).json({ message: 'Something went wrong - req error' });
});
});

我添加了一个 JSON.parse() 来展示如果您想在将数据发送到前端之前对数据进行一些操作,您将如何处理它。如果您只想返回硬币 API 的准确响应,请使用 end 事件,例如:

response.on('end', () => {
res.json(str);
});

关于node.js - Node - 调用 ExpressJS 路由,并且需要对其中的 API 执行 GET 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60447012/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com