在 TypeScript 中处理数据库的入门介绍
TypeScript 是 JavaScript 的严格类型扩展,它添加了静态类型和现代语言特性。在使用 TypeScript 开发服务端应用时,经常需要与数据库进行交互。最流行的两种解决方案是关系型数据库管理系统 PostgreSQL 和面向文档的数据库 MongoDB。本文将介绍如何使用经过验证的库和最佳实践,在 TypeScript 中高效地处理这两种数据库。
环境设置与依赖安装
开始之前,请确保已安装 Node.js 和 npm。创建一个新项目并安装必要的包:
mkdir typescript-db-examplecd typescript-db-examplenpm init -ynpm install typescript ts-node @types/node --save-devnpx tsc --init对于 PostgreSQL,我们将使用 TypeORM——一个支持 TypeScript 的强大 ORM 框架。对于 MongoDB,将使用 Mongoose。
npm install typeorm reflect-metadata pgnpm install mongoose通过 TypeORM 使用 PostgreSQL
配置 PostgreSQL 连接
TypeORM 支持装饰器和活动记录模式。我们创建一个 data-source.ts 文件用于配置:
import { DataSource } from "typeorm";
export const AppDataSource = new DataSource({ type: "postgres", host: "localhost", port: 5432, username: "your_username", password: "your_password", database: "test_db", synchronize: true, logging: false, entities: ["src/entity/**/*.ts"], migrations: [], subscribers: [],});创建实体
通过装饰器定义一个用户模型:
import { Entity, PrimaryGeneratedColumn, Column } from "typeorm";
@Entity()export class User { @PrimaryGeneratedColumn() id: number;
@Column() firstName: string;
@Column() lastName: string;
@Column({ unique: true }) email: string;
@Column({ default: true }) isActive: boolean;}PostgreSQL 的 CRUD 操作
执行基本的数据库操作:
import { AppDataSource } from "./data-source";import { User } from "./entity/User";
async function main() { await AppDataSource.initialize(); const userRepository = AppDataSource.getRepository(User);
// 创建 const newUser = userRepository.create({ firstName: "Ivan", lastName: "Petrov", email: "ivan@example.com" }); await userRepository.save(newUser);
// 读取 const users = await userRepository.find(); console.log("所有用户:", users);
// 更新 const userToUpdate = await userRepository.findOneBy({ id: 1 }); if (userToUpdate) { userToUpdate.isActive = false; await userRepository.save(userToUpdate); }
// 删除 await userRepository.delete({ id: 1 });}
main().catch(console.error);通过 Mongoose 使用 MongoDB
连接 MongoDB
Mongoose 提供了便捷的 MongoDB schema 和验证功能。设置连接:
import mongoose, { Schema, Document, Model } from "mongoose";
const MONGO_URI = "mongodb://localhost:27017/test";
mongoose.connect(MONGO_URI) .then(() => console.log("已连接到 MongoDB")) .catch(err => console.error("连接错误:", err));定义 Schema 和模型
创建 TypeScript 接口和 Mongoose schema:
// TypeScript 接口interface IUser extends Document { firstName: string; lastName: string; email: string; createdAt: Date;}
// Mongoose Schemaconst userSchema = new Schema({ firstName: { type: String, required: true }, lastName: { type: String, required: true }, email: { type: String, required: true, unique: true }, createdAt: { type: Date, default: Date.now }});
// 模型export const UserModel: Model = mongoose.model("User", userSchema); MongoDB 的 CRUD 操作
执行基本的 MongoDB 操作:
import { UserModel } from "./models/User";
async function main() { // 创建 const newUser = new UserModel({ firstName: "Ivan", lastName: "Petrov", email: "ivan@example.com" }); await newUser.save();
// 读取 const users = await UserModel.find(); console.log("所有用户:", users);
// 更新 await UserModel.updateOne({ _id: newUser._id }, { isActive: false });
// 删除 await UserModel.deleteOne({ _id: newUser._id });}
main().catch(console.error);结论
本文介绍了在 TypeScript 中使用 PostgreSQL 和 MongoDB 的基础知识。TypeORM 为关系型数据库提供了便捷的抽象层,支持装饰器和自动迁移生成。Mongoose 则为 MongoDB 提供了灵活的 schema 系统和验证功能。选择哪种解决方案取决于项目的具体需求:PostgreSQL 更适合具有复杂关系的结构化数据,而 MongoDB 则非常适合灵活的数据文档结构和快速原型开发。