2023-11-10|閱讀時間 ‧ 約 9 分鐘

5 分鐘用 NestJs 接上 mysql

    raw-image
    實現這個需求,你需要先安裝 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."
    }


    希望這能幫助到你! 👍

    分享至
    成為作者繼續創作的動力吧!
    © 2024 vocus All rights reserved.