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

MongoDB存ISO 3166格式国家名:航班系统城市名转三字码实现问题

实现方案

首先先明确:你提到的i18n-iso-countries是用于转换国家ISO标准二/三字码的工具,无法直接生成SYD、NYC这类IATA机场/城市三字码,以下是两种最适配你现有代码的实现方式:

方案1:直接扩展现有配置(最简单,适配你当前固定目的地列表的场景)

你当前的目的地是硬编码的固定数组,直接给每个选项添加对应的编码字段即可,无需引入额外依赖:

  1. 修改destinations数组,添加对应编码:
const destinations = [
  { title: "Sydney", code: "SYD" },
  { title: "Paris", code: "PAR" },
  { title: "Thailand", code: "TH" },
  { title: "France", code: "FR" },
  { title: "Dhaka", code: "DAC" },
  { title: "Bangkok", code: "BKK" },
  { title: "Indonesia", code: "ID" },
];
  1. 修改Autocomplete组件的onChange逻辑,直接存储编码到formData:
// 出发地的onChange修改为
onChange={(event, value) =>
  setFormData({ ...formData, from: value.code })
}
// 目的地的onChange同步修改为
onChange={(event, value) =>
  setFormData({ ...formData, to: value.code })
}

这种方式无需额外处理,提交时formData里的from/to已经是目标编码,直接存入MongoDB即可,你的Mongoose Schema不需要做任何修改。

方案2:动态转码(适配后续目的地会动态新增的场景)

如果后续目的地列表是动态获取的,不是固定值,可以引入对应转码包实现自动转换:

处理IATA城市/机场码

安装airport-codes包:
npm install airport-codes
在表单组件顶部导入并封装转换方法:

import airports from 'airport-codes';

// 城市名转IATA码,找不到则返回原名兜底
const getIataCode = (cityName) => {
  const match = airports.find({ city: cityName }).first();
  return match ? match.iata : cityName;
}

处理国家ISO码

如果是国家名称转换,就用你提到的i18n-iso-countries包:
安装:npm install i18n-iso-countries
导入并封装方法:

import countries from 'i18n-iso-countries';
import enLocale from 'i18n-iso-countries/langs/en.json';
countries.registerLocale(enLocale);

// 国家名转ISO二字码,找不到返回原名兜底
const getCountryCode = (countryName) => {
  return countries.getAlpha2Code(countryName, 'en') || countryName;
}

提交时统一转码

修改handleSubmit方法,在提交前对from/to字段做转码处理:

const handleSubmit = () => {
  const processedData = {
    ...formData,
    from: getIataCode(formData.from) || getCountryCode(formData.from),
    to: getIataCode(formData.to) || getCountryCode(formData.to),
    return: formData.tripType === "One Way" ? "None" : formData.return
  };
  // 这里把processedData提交到后端存入MongoDB即可
  console.log(processedData);
};

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 23:06:03