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": "万人"
}
相关推荐
蚰蜒螟4 小时前
从内核源码看Linux启动:chroot、execve与MS_MOVE的协奏曲
linux·服务器·网络
来者皆善5 小时前
ZYNQ linux上使用 USB CDC ACM
linux·运维·服务器
缓慢更新6 小时前
企业档案管理系统迁移实录:从文件服务器到智能检索引擎
运维·服务器
Dawn-bit6 小时前
Linux磁盘分区与Swap和磁盘故障查询
linux·运维·服务器·网络·云计算
梦想三三6 小时前
LangChain Output Parser 实战:从字符串到结构化数据的完整指南
android·服务器·langchain·github·uv
netho07 小时前
影刀rpa证书题库使用教学
运维·服务器·rpa
无足鸟ICT8 小时前
【RHCA+】$[]
linux·运维·服务器
运维技术小记8 小时前
国产化环境配置 VNC 远程桌面:麒麟 V10 实战
linux·运维·服务器
爱码少年8 小时前
一条Shell命令实现文件目录服务器间快速转移
服务器·shell
laboratory agent开发9 小时前
智能体多工具串联执行中途失败,部分写入的数据如何回滚
运维·服务器·数据库