跳转到主要内容

在Express中使用TypeORM的示例

初始设置

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

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

mkdir user

然后切换到该目录并创建一个新项目:

cd user
npm init

按照提示完成初始化过程,填写所有必需的应用程序信息。

现在,我们需要安装并设置TypeScript编译器。首先安装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 i express @types/express --save
  • express是Express引擎本身,它允许我们创建Web API
  • @types/express用于在使用Express时提供类型信息

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

import express, { Request, Response } from "express";

// 创建和设置Express应用程序
const app = express();
app.use(express.json());

// 注册路由

app.get("/users", function (req: Request, res: Response) {
// 这里将编写返回所有用户的逻辑
});

app.get("/users/:id", function (req: Request, res: Response) {
// 这里将编写返回特定用户的逻辑
});

app.post("/users", function (req: Request, res: Response) {
// 这里将编写保存用户的逻辑
});

app.put("/users/:id", function (req: Request, res: Response) {
// 这里将编写根据给定用户ID更新用户的逻辑
});

app.delete("/users/:id", function (req: Request, res: Response) {
// 这里将编写根据给定用户ID删除用户的逻辑
});

// 启动Express服务器
app.listen(3000);

现在您可以编译和运行项目了。您应该有一个正在运行的Express服务器,并且具有可用的路由。然而,这些路由还没有返回任何内容。

向应用程序添加TypeORM

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

首先,安装所需的软件包:

npm i typeorm mysql reflect-metadata --save
  • typeorm是TypeORM本身的软件包
  • mysql是底层的数据库驱动程序。如果您使用的是其他数据库系统,则必须安装相应的软件包
  • reflect-metadata用于使装饰器正常工作

让我们创建一个名为app-data-source.ts的文件,其中设置初始数据库连接选项:

import { createConnection } from "typeorm";

createConnection({
type: "mysql",
host: "localhost",
port: 3306,
username: "test",
password: "test",
database: "test",
entities: [__dirname + "/entity/*.js"],
synchronize: true,
logging: true
}).then(connection => {
console.log("Database connection established");
}).catch(error => {
console.log("Error connecting to database:", error);
});

根据您的实际配置进行相应的调整。了解更多关于选项的信息可以在这里查看文档

让我们在src/entity目录下创建一个名为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以建立数据库连接并开始使用createConnection函数:

import express, { Request, Response } from "express";
import { createConnection } from "typeorm";
import { User } from "./entity/user.entity";

createConnection()
.then(connection => {
// 创建和设置Express应用程序
const app = express();
app.use(express.json());

// 注册路由

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

app.get("/users/:id", async function (req: Request, res: Response) {
const userRepository = connection.getRepository(User);
const user = await userRepository.findOne(req.params.id);
res.json(user);
});

app.post("/users", async function (req: Request, res: Response) {
const userRepository = connection.getRepository(User);
const user = userRepository.create(req.body);
const savedUser = await userRepository.save(user);
res.json(savedUser);
});

app.put("/users/:id", async function (req: Request, res: Response) {
const userRepository = connection.getRepository(User);
const user = await userRepository.findOne(req.params.id);
userRepository.merge(user, req.body);
const updatedUser = await userRepository.save(user);
res.json(updatedUser);
});

app.delete("/users/:id", async function (req: Request, res: Response) {
const userRepository = connection.getRepository(User);
const user = await userRepository.findOne(req.params.id);
const deletionResult = await userRepository.remove(user);
res.json(deletionResult);
});

// 启动Express服务器
app.listen(3000, () => {
console.log("Server is running on port 3000");
});
})
.catch(error => {
console.log("Error connecting to database:", error);
});

现在,您应该有一个基本的Express应用程序与MySQL数据库连接并运行了。