1. 引言
在前几篇学习笔记中,我们探讨了 TypeScript 的基础知识、前后端框架的结合应用以及测试与调试技巧。本篇将重点介绍 TypeScript 与数据库的结合应用,特别是如何使用 TypeScript 访问和操作数据库(如 MySQL 和 MongoDB),并确保类型安全和数据一致性。
2. TypeScript 与 MySQL
MySQL 是一种流行的关系型数据库管理系统。我们可以使用 TypeORM
或 Sequelize
等 ORM 工具与 TypeScript 结合使用。
2.1 使用 TypeORM 连接 MySQL
TypeORM 是一个基于 TypeScript 的 ORM,支持 MySQL、PostgreSQL 等多个数据库。
2.1.1 安装 TypeORM 和 MySQL
首先,安装 TypeORM、MySQL 以及 TypeScript 必需的依赖。
npm install typeorm reflect-metadata mysql2
npm install typescript ts-node @types/node --save-dev
2.1.2 配置 TypeORM
在项目根目录下创建 ormconfig.json
配置文件。
{
"type": "mysql",
"host": "localhost",
"port": 3306,
"username": "root",
"password": "password",
"database": "test",
"synchronize": true,
"logging": false,
"entities": ["src/entity/**/*.ts"]
}
2.1.3 创建实体
创建一个用户实体。
// src/entity/User.ts
import { Entity, PrimaryGeneratedColumn, Column } from 'typeorm';
@Entity()
export class User {
@PrimaryGeneratedColumn()
id: number;
@Column()
firstName: string;
@Column()
lastName: string;
@Column()
age: number;
}
2.1.4 编写数据库操作代码
使用 TypeORM 连接数据库并进行基本的 CRUD 操作。
// src/index.ts
import 'reflect-metadata';
import { createConnection } from 'typeorm';
import { User } from './entity/User';
createConnection().then(async connection => {
console.log('Connected to MySQL database');
const userRepository = connection.getRepository(User);
// 创建用户
const user = new User();
user.firstName = 'John';
user.lastName = 'Doe';
user.age = 25;
await userRepository.save(user);
console.log('User has been saved');
// 查询用户
const users = await userRepository.find();
console.log('All users:', users);
}).catch(error => console.log(error));
2.1.5 运行代码
使用 ts-node
运行 TypeScript 代码。
npx ts-node src/index.ts
3. TypeScript 与 MongoDB
MongoDB 是一种流行的 NoSQL 数据库,适用于存储文档数据。我们可以使用 Mongoose
与 TypeScript 结合使用。
3.1 使用 Mongoose 连接 MongoDB
Mongoose 是一个基于 Node.js 的 MongoDB ODM(对象文档映射),提供了强大的文档模型和验证功能。
3.1.1 安装 Mongoose
首先,安装 Mongoose 及其 TypeScript 类型定义文件。
npm install mongoose @types/mongoose
3.1.2 创建模型
定义一个用户模型。
// src/models/User.ts
import { Schema, model } from 'mongoose';
interface IUser {
firstName: string;
lastName: string;
age: number;
}
const userSchema = new Schema<IUser>({
firstName: { type: String, required: true },
lastName: { type: String, required: true },
age: { type: Number, required: true }
});
const User = model<IUser>('User', userSchema);
export default User;
3.1.3 编写数据库操作代码
使用 Mongoose 连接 MongoDB 并进行基本的 CRUD 操作。
// src/index.ts
import mongoose from 'mongoose';
import User from './models/User';
async function main() {
await mongoose.connect('mongodb://localhost:27017/test');
console.log('Connected to MongoDB');
// 创建用户
const user = new User({
firstName: 'Jane',
lastName: 'Doe',
age: 30
});
await user.save();
console.log('User has been saved');
// 查询用户
const users = await User.find();
console.log('All users:', users);
}
main().catch(err => console.log(err));
3.1.4 运行代码
使用 ts-node
运行 TypeScript 代码。
npx ts-node src/index.ts
4. 使用环境变量管理配置
在实际项目中,数据库连接信息和其他敏感配置通常通过环境变量管理。
4.1 安装 dotenv
安装 dotenv
库,用于加载环境变量。
npm install dotenv
4.2 配置环境变量
在项目根目录下创建 .env
文件,存储数据库连接信息。
DB_HOST=localhost
DB_PORT=3306
DB_USERNAME=root
DB_PASSWORD=password
DB_DATABASE=test
4.3 加载环境变量
在代码中加载环境变量。
// src/index.ts
import 'dotenv/config';
import { createConnection } from 'typeorm';
import { User } from './entity/User';
createConnection({
type: 'mysql',
host: process.env.DB_HOST,
port: parseInt(process.env.DB_PORT || '3306', 10),
username: process.env.DB_USERNAME,
password: process.env.DB_PASSWORD,
database: process.env.DB_DATABASE,
synchronize: true,
logging: false,
entities: [User]
}).then(async connection => {
console.log('Connected to MySQL database');
const userRepository = connection.getRepository(User);
// 创建用户
const user = new User();
user.firstName = 'John';
user.lastName = 'Doe';
user.age = 25;
await userRepository.save(user);
console.log('User has been saved');
// 查询用户
const users = await userRepository.find();
console.log('All users:', users);
}).catch(error => console.log(error));
5. 结论
在本篇学习笔记中,我们探讨了 TypeScript 与数据库的结合应用,特别是如何使用 TypeORM 访问 MySQL 数据库,以及如何使用 Mongoose 访问 MongoDB 数据库。同时,我们还介绍了如何使用环境变量管理配置,通过掌握这些知识,你可以在实际项目中更好地利用 TypeScript 和数据库的强大功能,提升开发效率和代码质量。
下一篇学习笔记将介绍 TypeScript 与 GraphQL 的结合应用,希望你能继续关注本系列的学习笔记,进一步提升 TypeScript 编程技能。