如何在30分钟内用TypeScript编写REST API

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

如何在30分钟内用TypeScript编写REST API:逐步指南



创建REST API是任何后端开发人员的基本任务。使用TypeScript可以增加严格的类型检查,提高代码可读性并减少错误数量。在本文中,我们将从零开始,在短短30分钟内用TypeScript编写一个完整的REST API。您将了解Express、TypeORM以及代码组织的最佳实践。



1. 项目设置和安装依赖



首先创建一个新目录并初始化Node.js项目:



mkdir my-rest-apicd my-rest-apinpm init -y


安装必要的包:



npm install express reflect-metadata typeorm sqlite3npm install -D typescript @types/node @types/express ts-node nodemon


创建TypeScript配置文件tsconfig.json:



{  "compilerOptions": {    "target": "ES2020",    "module": "commonjs",    "outDir": "./dist",    "rootDir": "./src",    "strict": true,    "esModuleInterop": true,    "experimentalDecorators": true,    "emitDecoratorMetadata": true,    "skipLibCheck": true  },  "include": ["src/**/*"]}


2. 创建基本结构和入口点



按以下方式组织文件夹结构:



  • src/ — 主要代码
  • src/controllers/ — 控制器
  • src/entities/ — 数据库实体
  • src/routes/ — 路由


创建文件src/index.ts作为应用程序入口点:



import "reflect-metadata";import express from "express";import { AppDataSource } from "./data-source";import { userRoutes } from "./routes/userRoutes";

const app = express();const PORT = process.env.PORT || 3000;

app.use(express.json());

AppDataSource.initialize() .then(() => { console.log("Database connected"); app.use("/api/users", userRoutes); app.listen(PORT, () => { console.log(`Server running on http://localhost:${PORT}`); }); }) .catch((error) => console.log(error));


现在创建src/data-source.ts用于TypeORM配置:



import { DataSource } from "typeorm";import { User } from "./entities/User";

export const AppDataSource = new DataSource({ type: "sqlite", database: "database.sqlite", synchronize: true, logging: false, entities: [User],});


3. 定义实体和控制器



创建文件src/entities/User.ts作为用户模型:



import { Entity, PrimaryGeneratedColumn, Column } from "typeorm";

@Entity()export class User { @PrimaryGeneratedColumn() id!: number;

@Column() name!: string;

@Column() email!: string;

@Column({ default: true }) isActive!: boolean;}


现在创建控制器src/controllers/userController.ts:



import { Request, Response } from "express";import { AppDataSource } from "../data-source";import { User } from "../entities/User";

const userRepository = AppDataSource.getRepository(User);

export const getUsers = async (req: Request, res: Response) => { try { const users = await userRepository.find(); res.json(users); } catch (error) { res.status(500).json({ message: "Error fetching users" }); }};

export const getUserById = async (req: Request, res: Response) => { try { const user = await userRepository.findOneBy({ id: parseInt(req.params.id) }); if (!user) { return res.status(404).json({ message: "User not found" }); } res.json(user); } catch (error) { res.status(500).json({ message: "Error fetching user" }); }};

export const createUser = async (req: Request, res: Response) => {

博客

书籍推荐