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": "万人"
}
相关推荐
T1mzhou29 分钟前
ARM64 平台安全学习记录
linux·服务器·arm开发·arm
tedcloud1232 小时前
God‘s Eye View 怎么搭建?在云服务器上部署一个实时 3D 地球可视化平台
linux·服务器·开发语言·后端·rust
初願致夕霞2 小时前
Linux 进程间通信(IPC)机制详解:管道、FIFO 与 System V 共享内存
linux·服务器·c++
傲世仙尊2 小时前
从磁盘硬件到Ext文件系统-Linux磁盘级文件系统学习笔记
linux·运维·服务器·开发语言·c++
曦夜日长2 小时前
Linux系统篇,进程概念(三):进程状态详解、僵尸进程与孤儿进程的深度解析、Slab机制的了解
linux·运维·服务器
liulilittle2 小时前
为什么采用全局管理缓存及状态:麻将客户端状态管理
服务器·网络·游戏·客户端·异步·mahjong·麻将
Wang's Blog4 小时前
Java框架快速入门: Spring Security+OAuth2之搭建授权服务器(依赖与表结构)
java·服务器·spring
团子股股东峥哥5 小时前
day38-RHEL-管理存储堆栈
linux·运维·服务器
华章酱5 小时前
Linux服务器快速排查有问题的ip请求
服务器·安全·线上问题·攻击排查
狂人开飞机6 小时前
21、游戏架构设计模式
游戏·游戏引擎·godot