新闻详情

新闻详情

首页 / 资讯中心 / 详情

PokeAPI GraphQL v1beta2 的 Node.js 实战:用 node-fetch 查询宝可梦全套数据

发布时间:2026/10/2 8:16:41来源:尧图网络
PokeAPI GraphQL v1beta2 的 Node.js 实战:用 node-fetch 查询宝可梦全套数据
后端【免费下载链接】pokeapiThe Pokémon API项目地址https://gitcode.com/GitHub_Trending/po/pokeapi点击查看免费下载本文以仓库中 graphql/v1beta2/examples/node/README.md 及其配套示例 pokemon.js 为主体讲解如何使用 Node.js 与node-fetch调用 PokeAPI 的 GraphQL v1beta2 接口一次查询即可拿到某只宝可梦的性格值、传说/幻兽属性、世代、栖息地、身高体重、特性、种族值、属性、升级招式、遭遇地点数、特定版本携带道具与英文图鉴描述。读完本文你将掌握 PokeAPI GraphQL 客户端的封装方法、聚合查询aggregate与嵌套关系的写法以及如何用命令行参数动态查询任意宝可梦。示例定位最小可运行的 GraphQL 客户端在graphql/v1beta2/examples/目录下官方按语言组织了多种实现node、go各有独立文件夹并共享一批.gql查询文件如 pokemon_stats.gql、gen3_species.gql。其中 Node 示例的 README 非常精简核心就两条命令npm i node pokemon.js按照 examples/README.md 的说明所有.gql查询都可以直接在官方 GraphQL 控制台https://beta.pokeapi.co/graphql/console/中运行而各语言文件夹则展示同样的查询如何在真实代码中被调用。Node 版本给出的方案是npm i安装依赖后直接运行脚本无需任何配置即可在终端看到 JSON 输出。依赖与项目结构示例的依赖清单在 package.json 中{ name: examples, version: 1.0.0, main: , scripts: { test: echo \Error: no test specified\ exit 1 }, dependencies: { node-fetch: ^2.6.1 } }要点唯一运行时依赖是node-fetch^2.6.1即 CommonJS 版本的 fetch 实现因此 pokemon.js 顶部直接使用const fetch require(node-fetch)引入。版本号带^前缀安装时会解析到 2.x 的最新兼容版本。脚本未定义test脚本test只是占位也没有 TypeScript、babel 等构建步骤——这是一个开箱即跑的最小示例。GraphQL 客户端封装fetchGraphQLpokemon.js 的核心是一个通用请求函数const fetch require(node-fetch) async function fetchGraphQL(query, variables, operationName) { const result await fetch( https://beta.pokeapi.co/graphql/v1beta, { method: POST, body: JSON.stringify({ query: query, variables: variables, operationName: operationName }) } ) return await result.json() }这段代码揭示了 GraphQL over HTTP 的标准调用方式端点endpoint写死为https://beta.pokeapi.co/graphql/v1beta即 PokeAPI 公开的 GraphQL 网关地址。HTTP 方法使用POST因为 GraphQL 查询体可能很大且 POST 便于传递变量。请求体包含query查询字符串、variables变量对象、operationName操作名三个字段这是 GraphQL 服务器约定的标准 POST 载荷格式。响应处理await result.json()直接把响应解析为 JSON 对象返回调用方再从{ errors, data }中取出结果或错误。补充仓库中 graphql/v1beta2/config.yaml 显示本地部署配置为endpoint: http://localhost:8080、metadata_directory: metadata、version: 3。也就是说示例面向公网 beta 端点而自托管部署时只需把 URL 换成你自己的 Hasura 实例地址即可复用同一套代码。查询设计拆解一条查询拿遍全套数据fetchPokemon_details函数内嵌了本示例的核心 GraphQL 查询pokemon_details它通过参数化变量$name: String精确定位宝可梦并一次性抓取 12 类信息。下面逐段拆解代码取自 pokemon.js1. 物种级信息speciesspecies: pokemonspecies(where: {name: {_eq: $name}}) { name base_happiness is_legendary is_mythical generation: generation { name } habitat: pokemonhabitat { name }用where: {name: {_eq: $name}}做等值过滤_eq是 GraphQL 后端Hasura风格的比较运算符。base_happiness基础亲密度、is_legendary传说宝可梦、is_mythical幻之宝可梦都是物种表 public_pokemon_v2_pokemonspecies.yaml 中的字段。通过字段别名alias把关联对象重命名为generation、habitat外层查询可以直接用这些别名引用返回结果。2. 个体级信息pokemonpokemon: pokemons_aggregate(limit: 1) { nodes { height name id weightpokemons_aggregate是聚合查询limit: 1取首个节点。每个宝可梦物种通常有默认形态记录这里取一条即可获得身高height、体重weight和数据库主键id。3. 特性abilities与种族值statsabilities: pokemonabilities_aggregate { nodes { ability: ability { name } } } stats: pokemonstats { base_stat stat: stat { name } }特性通过pokemonabilities_aggregate聚合后嵌套展开ability的名称。种族值直接展开pokemonstats列表每条含base_stat与关联的stat.name如 hp、attack、defense 等。这与数据文件 pokemon_stats.csv 的字段结构一致。4. 升级可学招式levelUpMoveslevelUpMoves: pokemonmoves_aggregate( where: {movelearnmethod: {name: {_eq: level-up}}}, distinct_on: move_id ) { nodes { move: move { name } level } }where过滤学习方式为level-up招式学习方式对应表 pokemon_move_methods.csv。distinct_on: move_id按招式去重避免同一招式在多版本中重复出现。返回每个招式的名称与习得等级level。5. 遭遇地点数量foundInAsManyPlacesfoundInAsManyPlaces: encounters_aggregate { aggregate { count } }用聚合函数count统计该宝可梦在多少条遭遇记录中出现。图鉴描述数据对应 encounters.csv。6. 特定版本携带道具fireRedItemsfireRedItems: pokemonitems(where: {version: {name: {_eq: firered}}}) { item { name } rarity }限定版本为firered火红返回该版本中宝可梦可携带的道具名称与稀有度rarity。对应关联表 public_pokemon_v2_pokemonitem.yaml。7. 图鉴描述flavorTextflavorText: pokemonspeciesflavortexts( where: {language: {name: {_eq: en}}, version: {name: {_eq: firered}}} ) { flavor_text }同时按语言en与版本firered过滤取火红版本的英文图鉴描述数据源为 pokemon_species_flavor_text.csv。整个查询充分展示了 GraphQL 的优势一次往返即可拿到关联了物种、个体、特性、种族值、招式、遭遇、道具、图鉴文本的多层嵌套数据无需像 REST API 那样发起十几次请求。命令行入口与默认参数async function main() { const pokemon process.argv.slice(2)[0]; const { errors, data } await fetchPokemon_details(pokemon) if (errors) { console.error(errors) } console.log(JSON.stringify(data, null, 2)) } main()运行逻辑非常简单process.argv.slice(2)[0]取出第一个命令行参数作为宝可梦名称不传参数时为undefined函数默认参数namestarmie生效——因此脚本默认查询「宝石海星」。解构响应中的errors与data有错误则打印到stderr否则用JSON.stringify(data, null, 2)输出带缩进的美化 JSON。值得一提的是README 的描述写的是 Fetches info about Staryu海星星而代码注释与默认参数均为starmie实际运行以代码为准不传参时查询的是 starmie。运行示例在 graphql/v1beta2/examples/node 目录下执行npm i node pokemon.js输出为 starmie宝石海星的全套 JSON 数据。也可以传入任意宝可梦名称node pokemon.js pikachu node pokemon.js mewtwo若名称不存在GraphQL 会返回errors脚本将错误输出到控制台console.error(errors)。命名演进v1beta 与 v1beta2 的表名差异仓库同时保留了 GraphQL 的两套示例目录graphql/v1beta 与 graphql/v1beta2。对比两版 node/pokemon.js 可发现关键差异在表命名风格v1beta使用pokemon_v2_前缀如pokemon_v2_pokemonspecies、pokemon_v2_pokemonhabitat、pokemon_v2_pokemonmovesv1beta2去掉前缀直接使用pokemonspecies、pokemonhabitat、pokemonmoves字段名同样简化如pokemon_v2_movelearnmethod变为movelearnmethod、pokemon_v2_version变为version。其余查询结构where 过滤、aggregate、distinct_on、字段别名完全一致。这也说明只要掌握了本文讲解的查询写法在 v1beta 与 v1beta2 之间迁移只需替换表名与字段名。对应的底层元数据分别位于 graphql/v1beta2/metadata 与 graphql/v1beta/metadata每个表都有一份独立 YAML 定义可供查阅字段细节。更多实战入口如果想把同样的查询应用到其他场景仓库还提供了以下资源官方控制台所有.gql文件如 pokemon_stats.gql、item_translations.gql、weakestPokemonAbleToBeatFireRedAlone.gql都可在 GraphQL 控制台直接运行适合先验证查询再接入代码。Go 版本对照go/README.md 展示了go run pokemon.go的等价实现其输出同样为 JSON可用| jq美化可用来对照不同语言的客户端写法。本地部署若需自托管参考 graphql/v1beta2/config.yamlendpoint 为http://localhost:8080与仓库 Resources 下的 Docker/K8s 编排文件将示例中的请求 URL 替换为本地端点即可复用全部查询逻辑。小结本文以graphql/v1beta2/examples/node/为入口完整还原了 PokeAPI GraphQL v1beta2 的 Node.js 客户端写法一条fetchGraphQL封装函数承载所有请求一个参数化的pokemon_details查询在单次请求中拿到物种、个体、特性、种族值、招式、遭遇统计、道具与图鉴文本命令行入口支持任意宝可梦名称的动态查询。无论你是想快速在终端探索数据还是计划把 PokeAPI 接入自己的 Node 服务这份示例都是可直接复制改造的起点。赞分享后端【免费下载链接】pokeapiThe Pokémon API项目地址https://gitcode.com/GitHub_Trending/po/pokeapi点击查看免费下载相关推荐使用 node-fetch 调用 PokeAPI GraphQL从零构建一个查询宝可梦完整资料的 Node.js 示例使用 node fetch 调用 PokeAPI GraphQL从零构建一个查询宝可梦完整资料的 Node.js 示例 本文以 PokeAPI 仓库中的 gr后端PokeAPI GraphQL v1beta Go 实战用 pokemon.go 一站式查询宝可梦详情数据PokeAPI GraphQL v1beta Go 实战用 pokemon.go 一站式查询宝可梦详情数据 本文以 PokeAPI 仓库中 graphql/v后端GSoC Organizations 社区贡献指南新手如何从完善数据过滤器开始提交第一个 PRGSoC Organizations 社区贡献指南新手如何从完善数据过滤器开始提交第一个 PR GSoC Organizations 是一个用于查看和分析参与上一篇AShareData 教程3 步搭建你自己的 A 股数据本地 MySQL 库下一篇浏览器里的免费开源 EPUB 阅读器Epub.js Reader三行代码打开一本书创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

COMSOL正方晶格光子晶体能带仿真全流程:从边界条件到特征频率详解 2026/10/2 8:59:28

COMSOL正方晶格光子晶体能带仿真全流程:从边界条件到特征频率详解

各位做光学计算和光子器件设计的朋友,肯定对COMSOL Multiphysics不陌生。它在光子晶体能带仿真这块可以说是最常用的工具之一,但也是最容易让人“翻车”的地方。尤其是正方晶格光子晶体,作为入门频率最高、概念最基础的模型,很多人…

阅读更多 →
找搭子+点单社群系统源码:部署实战与订单状态机解析 2026/10/2 8:59:28

找搭子+点单社群系统源码:部署实战与订单状态机解析

简介:一套用于搭建交友社群、找搭子、陪玩点单等场景的企业级系统源码,功能完整度与市场上售价过万的版本相当,面向具备前后端开发经验的技术人员、社群运营者或创业者。压缩包内共2002个文件,以JS和CSS文件为主,辅以M…

阅读更多 →
云边端协同算力体系:从分布式推理到确定性调度 2026/10/2 8:59:22

云边端协同算力体系:从分布式推理到确定性调度

1. 这不是“云边端”口号,而是一场算力分配方式的底层重构最近和几个做工业视觉检测的老朋友吃饭,聊到他们新上线的产线质检系统——原来部署在机房里的GPU服务器,现在被拆成了三块:模型训练扔进公有云集群,中间层推理…

阅读更多 →
南华大学数据库原理实验报告:SQL Server建库到嵌套查询完整复现 2026/10/2 8:59:22

南华大学数据库原理实验报告:SQL Server建库到嵌套查询完整复现

简介:这份南华大学《数据库原理》实验报告面向大数据技术等专业学生,用于课程实验的参考与复盘,帮助读者系统掌握数据库管理系统操作与SQL语言应用。报告围绕SQL Server Management Studio展开,涵盖数据库与数据表的创建、主码外码…

阅读更多 →
MySQL安装到增删改查全教程:环境配置、Workbench操作与SQL实践 2026/10/2 8:59:15

MySQL安装到增删改查全教程:环境配置、Workbench操作与SQL实践

简介:面向MySQL零基础学员的安装与使用教程,覆盖数据库环境搭建与基础操作的全流程,特别适合初次接触关系型数据库、需要完成课程实验或本地开发环境部署的读者。教程从官网下载官方安装向导讲起,针对安装过程中的密码设置、组件下…

阅读更多 →
Spring Boot医院医疗仪器管理系统:从业务梳理到落地实践 2026/10/2 8:59:09

Spring Boot医院医疗仪器管理系统:从业务梳理到落地实践

我第一次接手医院仪器管理系统这个需求时,内心其实有点不屑——医院设备管理不就是个资产台账吗?无非是把Excel搬到网页上,增删改查加个导出,Spring Boot一个单体应用跑起来就完事了。直到我真的坐到设备科办公室,看到…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉