5 分鐘用 NestJs 接上 mysql

閱讀時間約 8 分鐘
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."
}


希望這能幫助到你! 👍

    留言0
    查看全部
    發表第一個留言支持創作者!
    Thomas Chu 的沙龍 的其他內容
    在開發 email 的過程,一定會有要寄信的需要,這時候 google script 可以快速的幫忙這段,透過簡單的 code 就可以完成
    在開發 email 的過程,一定會有要寄信的需要,這時候 google script 可以快速的幫忙這段,透過簡單的 code 就可以完成
    你可能也想看
    Google News 追蹤
    Thumbnail
    這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
    Thumbnail
    美國總統大選只剩下三天, 我們觀察一整週民調與金融市場的變化(包含賭局), 到本週五下午3:00前為止, 誰是美國總統幾乎大概可以猜到60-70%的機率, 本篇文章就是以大選結局為主軸來討論近期甚至到未來四年美股可能的改變
    Thumbnail
    Faker昨天真的太扯了,中國主播王多多點評的話更是精妙,分享給各位 王多多的點評 「Faker是我們的處境,他是LPL永遠繞不開的一個人和話題,所以我們特別渴望在決賽跟他相遇,去直面我們的處境。 我們曾經稱他為最高的山,最長的河,以為山海就是盡頭,可是Faker用他28歲的年齡...
    Thumbnail
    想透過進階的學習策略進行自我提升的你,會從這篇文章中獲得寶貴的見解。 這種行動學習術可以解決你在吸收新知識時的注意力分散問題,並提升你的學習效率。 同時,這種學習策略也將引領你探索深層次的自我實現之路,並在繁忙的生活中找到屬於自己的學習節奏。 以下是我在用1.5倍速聽3分鐘內容後用Obsidian大
    Thumbnail
    創傷是什麼? 為什麼會解離? 什麼又是解離? 會什麼罹患創傷後壓力的人有時像是斷片一樣呢? 用五分鐘,讓我告訴你何謂創傷記憶吧 ~
    Thumbnail
    AI人工智能,並非什麼新的名詞,但自從2022.11月ChatGTP火熱啟動後,AI相關的應用就如雨後春筍般地在市場蔓延擴散。 今天就跟大家分享一個簡單入門的人工智能,只要5分鐘就能簡單做出專屬自己風格的logo。
    Thumbnail
    「每天被雜事壓得喘不過氣,動不動就出現需要馬上解決的鳥事,結果一天弄下來,雜事做一堆,正事反而完成,為了怕開天窗,只好無奈的留下來加班做完…….」這場景你很熟悉嗎?如果你也厭倦每天被雜事耽誤而加班,苦惱到底該怎麼提高生產力,相信這篇文章能夠幫助到你!
    Thumbnail
    遊學留學差別比較文章目錄 一、遊學、留學差別?一張表格帶你看懂遊學和留學差異 二、遊學、留學差別?四國遊學留學費用比較 三、遊學費用、留學費用省錢技巧分享 📷 出國遊學、海外留學是許多人的夢想,但是,你了解遊學、留學差別嗎?究竟要選擇遊學還是留學比較好?遊學費用、留學費用會很貴嗎?….你可能有許多
    Thumbnail
      《被討厭的勇氣》多年來一直是熱門暢銷書籍,書中藉由青年人與哲學家的對談,娓娓道來阿德勒心理學的真諦,並期許讀者們找到人生的幸福哲學。因此,這本書多半被歸類在心理學、勵志類、人生哲學等範疇。然而,在閱讀的過程中卻發現,書裡有幾項觀念很適合投資人,以下便與大家分享我的心得。 一、甘於平凡的勇氣   
    Thumbnail
    接觸網路行銷的人,相信對SEO(搜尋引擎優化)這名詞不陌生,那SEM(搜尋引擎行銷)又是什麼呢?和SEO的差別在哪裡?在網路行銷中有什麼不同的用處?我們將為你解答!
    Thumbnail
    這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
    Thumbnail
    美國總統大選只剩下三天, 我們觀察一整週民調與金融市場的變化(包含賭局), 到本週五下午3:00前為止, 誰是美國總統幾乎大概可以猜到60-70%的機率, 本篇文章就是以大選結局為主軸來討論近期甚至到未來四年美股可能的改變
    Thumbnail
    Faker昨天真的太扯了,中國主播王多多點評的話更是精妙,分享給各位 王多多的點評 「Faker是我們的處境,他是LPL永遠繞不開的一個人和話題,所以我們特別渴望在決賽跟他相遇,去直面我們的處境。 我們曾經稱他為最高的山,最長的河,以為山海就是盡頭,可是Faker用他28歲的年齡...
    Thumbnail
    想透過進階的學習策略進行自我提升的你,會從這篇文章中獲得寶貴的見解。 這種行動學習術可以解決你在吸收新知識時的注意力分散問題,並提升你的學習效率。 同時,這種學習策略也將引領你探索深層次的自我實現之路,並在繁忙的生活中找到屬於自己的學習節奏。 以下是我在用1.5倍速聽3分鐘內容後用Obsidian大
    Thumbnail
    創傷是什麼? 為什麼會解離? 什麼又是解離? 會什麼罹患創傷後壓力的人有時像是斷片一樣呢? 用五分鐘,讓我告訴你何謂創傷記憶吧 ~
    Thumbnail
    AI人工智能,並非什麼新的名詞,但自從2022.11月ChatGTP火熱啟動後,AI相關的應用就如雨後春筍般地在市場蔓延擴散。 今天就跟大家分享一個簡單入門的人工智能,只要5分鐘就能簡單做出專屬自己風格的logo。
    Thumbnail
    「每天被雜事壓得喘不過氣,動不動就出現需要馬上解決的鳥事,結果一天弄下來,雜事做一堆,正事反而完成,為了怕開天窗,只好無奈的留下來加班做完…….」這場景你很熟悉嗎?如果你也厭倦每天被雜事耽誤而加班,苦惱到底該怎麼提高生產力,相信這篇文章能夠幫助到你!
    Thumbnail
    遊學留學差別比較文章目錄 一、遊學、留學差別?一張表格帶你看懂遊學和留學差異 二、遊學、留學差別?四國遊學留學費用比較 三、遊學費用、留學費用省錢技巧分享 📷 出國遊學、海外留學是許多人的夢想,但是,你了解遊學、留學差別嗎?究竟要選擇遊學還是留學比較好?遊學費用、留學費用會很貴嗎?….你可能有許多
    Thumbnail
      《被討厭的勇氣》多年來一直是熱門暢銷書籍,書中藉由青年人與哲學家的對談,娓娓道來阿德勒心理學的真諦,並期許讀者們找到人生的幸福哲學。因此,這本書多半被歸類在心理學、勵志類、人生哲學等範疇。然而,在閱讀的過程中卻發現,書裡有幾項觀念很適合投資人,以下便與大家分享我的心得。 一、甘於平凡的勇氣   
    Thumbnail
    接觸網路行銷的人,相信對SEO(搜尋引擎優化)這名詞不陌生,那SEM(搜尋引擎行銷)又是什麼呢?和SEO的差別在哪裡?在網路行銷中有什麼不同的用處?我們將為你解答!