You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在React项目中获取仅返回纯文本的REST接口响应结果

Geonames 国家码接口 React 接入方案

这个接口默认返回纯文本格式的国家码,不需要按JSON响应的逻辑处理,实现步骤如下:

接口参数预处理

你当前请求带的formatted=true参数会返回带多余换行、缩进的格式化文本,直接把参数值改成formatted=false,接口就会返回无冗余空白的标准两字母国家码,比如示例坐标请求返回值就是AT(奥地利)。
注意:示例里的vincea23是公开测试用户名,生产环境请替换成你自己在Geonames注册的免费账号用户名,避免触发限流。

核心调用逻辑

因为返回值是纯文本,请求时直接用Response的text()方法解析即可,不需要调用json(),用原生fetch就能实现,不需要额外引入第三方请求库:

/**
 * 根据经纬度获取国家码
 * @param {number} lat 纬度
 * @param {number} lng 经度
 * @param {string} username Geonames账号用户名
 * @returns {Promise<string|null>} 两字母国家码
 */
const getCountryCode = async (lat, lng, username) => {
  try {
    // 生产环境建议替换为https前缀地址,避免HTTPS站点拦截HTTP请求:https://secure.geonames.org/countryCode
    const res = await fetch(
      `http://api.geonames.org/countryCode?formatted=false&lat=${lat}&lng=${lng}&username=${username}`
    )
    const result = await res.text()
    const countryCode = result.trim()
    // 正常国家码长度为2位,长度异常时说明接口返回了错误信息(比如坐标在公海、用户名无效、请求超限)
    if (countryCode.length !== 2) {
      throw new Error(countryCode)
    }
    return countryCode
  } catch (err) {
    console.error('国家码获取失败:', err.message)
    return null
  }
}

React 组件内使用示例

函数组件中结合useEffect调用即可:

import { useEffect, useState } from 'react'

export default function GeoInfo() {
  const [countryCode, setCountryCode] = useState(null)
  // 替换为你自己的Geonames用户名
  const GEONAMES_USER = 'your_personal_username'

  useEffect(() => {
    // 示例坐标测试
    getCountryCode(47.03, 10.2, GEONAMES_USER).then(code => {
      setCountryCode(code)
    })
  }, [])

  return (
    <div>
      对应国家码:{countryCode ?? '加载中...'}
    </div>
  )
}

常见注意事项

  • 不要误用res.json()解析响应:接口返回text/plain类型内容,强行调用JSON解析方法会直接抛出语法错误
  • 线上环境优先使用HTTPS协议接口,避免浏览器混合内容拦截
  • 做好错误兜底:当传入坐标位于公海、账号请求量超限、用户名无效时,接口会返回文本形式的错误提示,需要在代码里做捕获处理

内容的提问来源于stack exchange,提问作者Vincent A

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.03 07:45:40