Skip to main content

connect-mysql

實現這個需求,你需要先安裝 Node.js 和 Nest.js 框架,並確保你已經安裝了 MySQL 數據庫。

首先,創建一個新的 Nest.js 項目:

$ npm i -g @nestjs/cli
$ nest new blog-backend

然後,進入項目目錄並安裝相關的依賴:

$ cd blog-backend
$ npm install mysql2 nestjs-typeorm typeorm

接下來,創建一個 Post 實體,用於映射到數據庫中的 posts 表:

$ nest generate class post/entity/post

post.entity.ts 文件中,定義 Post 實體的屬性和數據庫映射:

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

@Entity()
export class Post {
@PrimaryGeneratedColumn()
id: number;

@Column()
title: string;

@Column()
content: string;
}

接下來,創建一個 PostService 服務,用於處理與 Post 實體相關的業務邏輯:

$ nest generate service post/service/post

post.service.ts 文件中,實現一些基本的 CRUD 方法:

import { Injectable } from "@nestjs/common";
import { InjectRepository } from "@nestjs/typeorm";
import { Repository } from "typeorm";
import { Post } from "../entity/post";

@Injectable()
export class PostService {
constructor(
@InjectRepository(Post)
private postRepository: Repository<Post>
) {}

async findAll(): Promise<Post[]> {
return this.postRepository.find();
}

async create(post: Post): Promise<Post> {
return this.postRepository.save(post);
}

async update(id: number, post: Post): Promise<Post> {
await this.postRepository.update(id, post);
return this.postRepository.findOne(id);
}

async delete(id: number): Promise<void> {
await this.postRepository.delete(id);
}
}

然後,創建一個 PostController 控制器,用於處理與 Post 相關的 HTTP 請求:

$ nest generate controller post/controller/post

post.controller.ts 文件中,實現一些基本的路由處理方法:

import { Controller, Get, Post, Put, Delete, Body, Param } from "@nestjs/common";
import { PostService } from "../service/post.service";
import { Post as PostEntity } from "../entity/post";

@Controller("posts")
export class PostController {
constructor(private postService: PostService) {}

@Get()
async findAll(): Promise<PostEntity[]> {
return this.postService.findAll();
}

@Post()
async create(@Body() post: PostEntity): Promise<PostEntity> {
return this.postService.create(post);
}

@Put(":id")
async update(@Param("id") id: number, @Body() post: PostEntity): Promise<PostEntity> {
return this.postService.update(id, post);
}

@Delete(":id")
async delete(@Param("id") id: number): Promise<void> {
return this.postService.delete(id);
}
}

最後,配置數據庫連接,編輯 src/app.module.ts 文件:

import { Module } from "@nestjs/common";
import { TypeOrmModule } from "@nestjs/typeorm";
import { Connection } from "typeorm";
import { Post } from "./post/entity/post";
import { PostService } from "./post/service/post.service";
import { PostController } from "./post/controller/post.controller";

@Module({
imports: [
TypeOrmModule.forRoot({
type: "mysql",
host: "localhost",
port: 3306,
username: "your_username",
password: "your_password",
database: "your_database_name",
entities: [Post],
synchronize: true,
}),
TypeOrmModule.forFeature([Post]),
],
controllers: [PostController],
providers: [PostService],
})
export class AppModule {
constructor(private connection: Connection) {}
}

現在,你可以運行項目:

$ npm run start

項目運行後,你可以使用 Postman 或其他 HTTP 客戶端工具來測試接口。例如,你可以使用以下請求來創建一個新的博客文章:

POST /posts
Content-Type: application/json

{
"title": "Hello World",
"content": "This is my first blog post."
}

希望這能幫助到你! 👍