在 TypeScript 中操作数据库:PostgreSQL 与 MongoDB

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

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

开始课程

在 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 则非常适合灵活的数据文档结构和快速原型开发。

博客

书籍推荐