Node.js游戏服务器项目移植-2: 用TypeScript还是Javascript

nodejs服务器不仅仅可以使用javascript作为开发语言,也可以使用typescript。这里用ts实现一个简单的 城市人口查询服务器 作为例子

一、先安装依赖(TS 版)

bash

运行

复制代码
npm init -y
npm install express
npm install -D typescript @types/express @types/node ts-node

二、创建 tsconfig.json

json

复制代码
{
  "compilerOptions": {
    "target": "ES2020",
    "module": "CommonJS",
    "outDir": "./dist",
    "rootDir": "./src",
    "strict": true,
    "esModuleInterop": true
  },
  "include": ["src/**/*"]
}

三、完整 TypeScript 代码(2 个文件)

src/PopulationSearch.ts

typescript

运行

复制代码
// 城市人口查询类(TS 版)
export class PopulationSearch {
  // 静态变量
  static callNum = 0;
  static notifyNumEvent?: (count: number) => void;

  // 成员变量
  private cityName = "";

  async search(cityName: string) {
    this.cityName = cityName;
    console.log("将要查询人口的城市是:" + cityName);

    // 模拟城市人口数据
    const populationData: Record<string, number> = {
      "北京": 2154,
      "上海": 2428,
      "广州": 1530,
      "深圳": 1756,
      "杭州": 981,
      "成都": 1658,
      "重庆": 3212,
    };

    if (!populationData[cityName]) {
      throw new Error("暂无该城市人口数据");
    }

    // 计数 + 触发事件
    PopulationSearch.callNum++;
    PopulationSearch.notifyNumEvent?.(PopulationSearch.callNum);

    return {
      city: cityName,
      population: populationData[cityName],
      year: 2024,
      unit: "万人"
    };
  }
}

src/index.ts(主服务)

typescript

运行

复制代码
import { PopulationSearch } from "./PopulationSearch";
import express from "express";

const app = express();

// 业务方法
async function run(cityName: string) {
  try {
    const service = new PopulationSearch();
    return await service.search(cityName);
  } catch (err) {
    console.error("错误:", err);
    return null;
  }
}

// 统计回调
PopulationSearch.notifyNumEvent = (count) => {
  console.log(`恭喜,API被调用了 ${count} 次,可喜可贺!`);
};

// Express 5 接口(async 直接支持)
app.get("/search/:cityName", async (req, res) => {
  const cityName = req.params.cityName;
  const data = await run(cityName);

  if (data) {
    res.json(data);
  } else {
    res.status(404).json({ error: "未找到该城市人口数据" });
  }
});

// 错误处理
app.use((err: Error, req: express.Request, res: express.Response) => {
  console.error("服务器异常:", err);
  res.status(500).json({ error: "服务器错误" });
});

// 启动
app.listen(3000, () => {
  console.log("TS + Express5 人口服务运行在 http://localhost:3000");
});

四、启动运行

bash

运行

复制代码
npx ts-node src/index.ts

五、测试接口

plaintext

复制代码
http://localhost:3000/search/北京
http://localhost:3000/search/上海

返回:

json

复制代码
{
  "city": "北京",
  "population": 2154,
  "year": 2024,
  "unit": "万人"
}
相关推荐
jump_jump18 小时前
为了重玩金庸群侠传,我研究了一下 Ruffle 怎么复活 Flash
游戏·rust·github
zzzzzz3102 天前
9K Star 炸裂开源!这个 C 语言写的代码知识图谱,把 Linux 内核索引压缩到了 3 分钟
linux·服务器·sql
XIAOHEZIcode2 天前
Linux系统鼠标偏移常见原因以及修复方案
linux·运维·游戏
Aloys_Code3 天前
逆向一个被遗忘的DVD游戏格式:从DES加密到Rust模拟器
游戏·模拟器·retroarch·复古游戏·native32·sunplus·赤刃·钢铁风暴
米丘3 天前
vite8 vite preview 命令做了什么?
node.js·vite
金銀銅鐵3 天前
用 Python 实现 Take-Away 游戏
python·游戏
blanks20203 天前
生成 公钥私钥 笔记
node.js
金銀銅鐵4 天前
用 Pygame 实现 15 puzzle
python·数学·游戏
糖拌西瓜皮5 天前
Java开发者视角:深入理解Node.js异步编程模型
java·后端·node.js
大树885 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai