跳至主内容区

使用 TypeORM 与 Express 的示例

非官方测试版翻译

本页面由 PageTurner AI 翻译(测试版)。未经项目官方认可。 发现错误? 报告问题 →

初始设置

让我们创建一个名为 "user" 的简单应用,该应用将用户数据存储在数据库中,并允许我们通过Web API实现用户创建、更新、删除操作,以及获取所有用户列表和按ID获取单个用户。

首先,创建一个名为 "user" 的目录:

mkdir user

进入该目录并初始化新项目:

cd user
npm init

填写所有必需的应用程序信息以完成初始化过程。

现在需要安装并配置 TypeScript 编译器。首先安装它:

npm i typescript --save-dev

创建 tsconfig.json 文件,该文件包含应用程序编译和运行所需的配置。 使用你喜欢的编辑器创建该文件,并添加以下配置:

{
"compilerOptions": {
"lib": ["es5", "es6", "dom"],
"target": "es5",
"module": "commonjs",
"moduleResolution": "node",
"emitDecoratorMetadata": true,
"experimentalDecorators": true
}
}

src 目录中创建主应用入口文件 app.ts

mkdir src
cd src
touch app.ts

在文件中添加简单的 console.log 语句:

console.log("Application is up and running")

现在是运行应用程序的时候了。 首先需要编译 TypeScript 项目:

tsc

编译完成后,将生成 src/app.js 文件。 使用以下命令运行:

node src/app.js

运行应用程序后,控制台应立即显示 "Application is up and running" 消息。

每次修改文件后都必须重新编译。 或者,你可以设置文件监视器或安装 ts-node 来避免每次手动编译。

在应用中添加 Express

让我们将 Express 添加到应用中。首先安装所需依赖包:

npm install express
npm install @types/express --save-dev
  • express 是 Express 引擎本身,它允许我们创建 Web API

  • @types/express 用于在使用 Express 时提供类型信息

编辑 src/app.ts 文件并添加 Express 相关逻辑:

import * as express from "express"
import { Request, Response } from "express"

// create and setup express app
const app = express()
app.use(express.json())

// register routes

app.get("/users", function (req: Request, res: Response) {
// here we will have logic to return all users
})

app.get("/users/:id", function (req: Request, res: Response) {
// here we will have logic to return user by id
})

app.post("/users", function (req: Request, res: Response) {
// here we will have logic to save a user
})

app.put("/users/:id", function (req: Request, res: Response) {
// here we will have logic to update a user by a given user id
})

app.delete("/users/:id", function (req: Request, res: Response) {
// here we will have logic to delete a user by a given user id
})

// start express server
app.listen(3000)

现在可以编译并运行项目。 此时应已启动 Express 服务器并配置了可用路由, 但这些路由尚未返回任何内容。

在应用中添加 TypeORM

最后,让我们将 TypeORM 添加到应用中。 本例将使用 mysql 驱动, 其他驱动的设置过程类似。

首先安装所需依赖包:

npm install typeorm reflect-metadata mysql
  • typeorm 是 TypeORM 包本体

  • reflect-metadata 是确保装饰器正常工作的必备依赖,请确保在 TypeORM 代码之前导入它

  • mysql 是底层数据库驱动,如果使用其他数据库系统,必须安装相应的驱动包

创建 app-data-source.ts 文件来配置初始数据库连接选项:

import { DataSource } from "typeorm"

export const myDataSource = new DataSource({
type: "mysql",
host: "localhost",
port: 3306,
username: "test",
password: "test",
database: "test",
entities: [__dirname + "/entities/**/*{.js,.ts}"],
logging: true,
synchronize: true,
})

根据你的需求配置各项选项。 更多选项信息请参阅此处

让我们在 entities 目录下创建 user.entity.ts 实体:

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

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

@Column()
firstName: string

@Column()
lastName: string
}

修改 src/app.ts 以建立数据库连接并开始使用 myDataSource

import "reflect-metadata"

import * as express from "express"
import { Request, Response } from "express"
import { User } from "./entities/User"
import { myDataSource } from "./app-data-source.ts"

// establish database connection
try {
await myDataSource.initialize()
console.log("Data Source has been initialized!")
} catch (error) {
console.error("Error during Data Source initialization:", error)
}

// create and setup express app
const app = express()
app.use(express.json())

// register routes
app.get("/users", async function (req: Request, res: Response) {
const users = await myDataSource.getRepository(User).find()
res.json(users)
})

app.get("/users/:id", async function (req: Request, res: Response) {
const results = await myDataSource.getRepository(User).findOneBy({
id: req.params.id,
})
return res.send(results)
})

app.post("/users", async function (req: Request, res: Response) {
const user = await myDataSource.getRepository(User).create(req.body)
const results = await myDataSource.getRepository(User).save(user)
return res.send(results)
})

app.put("/users/:id", async function (req: Request, res: Response) {
const user = await myDataSource.getRepository(User).findOneBy({
id: req.params.id,
})
myDataSource.getRepository(User).merge(user, req.body)
const results = await myDataSource.getRepository(User).save(user)
return res.send(results)
})

app.delete("/users/:id", async function (req: Request, res: Response) {
const results = await myDataSource.getRepository(User).delete(req.params.id)
return res.send(results)
})

// start express server
app.listen(3000)

现在你应该已拥有一个连接到 MySQL 数据库的基础 Express 应用并正常运行。