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": "万人"
}
相关推荐
迪菲赫尔曼3 分钟前
【基础篇 12】把环境与源码接起来:检查 GPU,再安装服务器上的项目
运维·服务器·开发语言·人工智能·python·yolo·目标检测
cq林志炫13 分钟前
两个Linux服务器之间同步文件
linux·运维·服务器
yyuuuzz40 分钟前
云服务器安全组规则优先级的机制记录
运维·服务器·网络·安全·阿里云·aws
智购科技自动售货机厂家1 小时前
让AI经营自动售货机:从Project Vend看工具权限与业务规则~YH
大数据·服务器·单片机·嵌入式硬件·深度学习
jnrjian1 小时前
delete file shell 让 AI 写脚本
服务器·开发语言
数字新视界1 小时前
空调控制器AIRC800的智能化管理与应用实践
大数据·服务器·数据库·动环监控系统·动力与环境监控系统
知已难寻1 小时前
01 · OpenStack的认证管理 Keystone
运维·服务器·云原生·云计算·openstack
驱动小百科1 小时前
国产3A游戏《影之刃零》正式发售:售价及电脑配置要求介绍
游戏·影之刃零·影之刃零配置要求·影之刃零下载·影之刃零售价
企鹅侠客2 小时前
Linux CPU 负载平均值(Load Average)详解:从原理到实践
linux·运维·服务器·服务器负载
吃一碗粉只付一碗钱2 小时前
10-令牌里的用户主键不要明文
服务器·数据库·sql·sqlserver·c#