如何使用JavaScript将API获取的数组数据POST发送到Webhook
解决方案
这个需求完全可以用JavaScript实现,你现有代码的问题主要集中在异步执行顺序和内容格式化两个部分,修改后的可用代码如下:
const api = "http://ip-api.com/json/" // 存储拉取到的IP信息 const ipinfo = [] // 拉取IP信息的异步函数 async function getIP() { try { const response = await fetch(api) if (!response.ok) throw new Error('API请求失败') const data = await response.json(); ipinfo.push(data); console.log('拉取到的IP信息:', ipinfo) // 拉取成功后自动调用发送webhook的函数 await sendMessage() } catch (err) { console.error('拉取IP信息出错:', err) } } // 发送到Webhook的异步函数 async function sendMessage() { try { // 格式化要展示的IP信息,可根据需求自定义调整展示字段 const formattedIPInfo = ipinfo.map(info => ` IP地址:${info.query} 国家:${info.country}(${info.countryCode}) 地区:${info.regionName} 城市:${info.city} 邮编:${info.zip} 经纬度:${info.lat}, ${info.lon} 运营商:${info.org} 时区:${info.timezone} `).join('\n---\n') const response = await fetch('替换为你实际的WEBHOOK URL', { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify({ allowed_mentions: { parse: ['users', 'roles'], }, embeds: [{ title: 'New IP logged', description: formattedIPInfo, }], }) }) if (!response.ok) throw new Error('Webhook请求发送失败') console.log('Webhook发送成功') } catch (err) { console.error('发送Webhook出错:', err) } } // 启动拉取逻辑 getIP()
核心修改点说明
- 修复异步执行顺序问题:原代码中
getIP是异步请求,直接调用后还没等数据返回就执行sendMessage会拿到空数组,修改后拉取到数据再自动调用发送函数,确保数据正常传递。 - 优化内容格式化逻辑:原代码直接拼接字符串和数组会输出
ipinfo[object Object]这类无效内容,现在将数组里的IP信息按字段拆解格式化,展示更清晰,也可以自行调整展示的字段和排版。 - 新增错误捕获逻辑:所有异步请求都加了异常捕获和状态判断,出现问题时可以直接在控制台查看报错原因,降低排查成本。
- 统一异步函数写法:
sendMessage也改为异步函数,后续如果需要添加发送成功/失败的后续处理逻辑更加方便。
内容的提问来源于stack exchange,提问作者Luis
相关产品推荐
相关产品推荐

