在 TypeScript 中操作数据库:面向初学者的 PostgreSQL 和 MongoDB
\n\n现代 Web 开发几乎离不开数据库。TypeScript 作为 JavaScript 的强类型超集,为安全且可预测的数据操作提供了绝佳机会。在本文中,我们将详细讲解如何在 TypeScript 项目中连接并使用两种流行的数据库——关系型数据库 PostgreSQL 和文档型数据库 MongoDB。本文面向熟悉 TypeScript 和 Node.js 基础的初学者开发者。
\n\n1. 环境准备与依赖安装
\n\n开始之前,请确保您已安装 Node.js 和 npm。为了使用 TypeScript,请安装编译器和 Node.js 的类型定义:
\n\nnpm install -g typescript\nnpm init -y\nnpm install typescript @types/node --save-dev\nnpx tsc --init\n\n我们将使用以下流行的库来操作数据库:
\n- \n
- TypeORM — 用于 PostgreSQL(及其他 SQL 数据库)的 ORM \n
- Mongoose — 用于 MongoDB 的 ODM \n
将它们安装到您的项目中:
\n\nnpm install typeorm reflect-metadata pg\nnpm install mongoose\n\n别忘了在 tsconfig.json 文件中添加 "experimentalDecorators": true 和 "emitDecoratorMetadata": true。
2. 通过 TypeORM 操作 PostgreSQL
\n\nPostgreSQL 是一个强大的关系型数据库管理系统。TypeORM 允许您通过实体(entities)和仓库(repositories)来操作它,从而使代码清晰且类型安全。
\n\n2.1. 创建连接与实体
\n\n创建文件 data-source.ts 来配置连接:
import { DataSource } from "typeorm";\n\nexport const AppDataSource = new DataSource({\n type: "postgres",\n host: "localhost",\n port: 5432,\n username: "your_user",\n password: "your_password",\n database: "your_db",\n synchronize: true,\n logging: false,\n entities: ["src/entity/**/*.ts"],\n});\n\n现在,在文件 src/entity/User.ts 中创建实体 User:
import { Entity, PrimaryGeneratedColumn, Column } from "typeorm";\n\n@Entity()\nexport class User {\n @PrimaryGeneratedColumn()\n id: number;\n\n @Column()\n name: string;\n\n @Column({ unique: true })\n email: string;\n\n @Column()\n age: number;\n}\n\n2.2. 使用 TypeORM 进行 CRUD 操作
\n\n创建和获取用户的示例:
\n\nimport { AppDataSource } from "./data-source";\nimport { User } from "./entity/User";\n\nasync function main() {\n await AppDataSource.initialize();\n const userRepository = AppDataSource.getRepository(User);\n\n // 创建\n const newUser = userRepository.create({\n name: "伊万",\n email: "ivan@example.com",\n age: 25\n });\n await userRepository.save(newUser);\n console.log("用户已创建:", newUser);\n\n // 读取所有\n const users = await userRepository.find();\n console.log("所有用户:", users);\n\n // 更新\n await userRepository.update({ id: 1 }, { age: 26 });\n\n // 删除\n await userRepository.delete({ id: 1 });\n}\n\nmain().catch(console.error);\n\nTypeORM 会自动生成 SQL 查询,而 TypeScript 的类型系统可以在编译阶段防止错误。
\n\n3. 通过 Mongoose 操作 MongoDB
\n\nMongoDB 是一个 NoSQL 数据库,以类似 JSON 的格式存储数据。Mongoose 为 TypeScript 提供了模式定义和数据验证功能。
\n\n3.1. 连接与定义模式
\n\n创建文件 db.ts 用于连接:
import mongoose from "mongoose";\n\nexport async function connectDB() {\n await mongoose.connect("mongodb://localhost:27017/mydb");\n console.log("已连接到 MongoDB");\n}