返回

全栈搭建个人博客(2)--nest+typeorm搭建博客后端

前端

前言

在上一篇文章中,我们已经完成了博客的前端搭建,这一篇我们来搭建博客的后端。

搭建后端环境

安装 Nest.js

npm install -g @nestjs/cli
nest new blog-backend

安装 TypeORM

npm install typeorm

配置 TypeORM

src/typeorm.config.ts 文件中,添加以下内容:

import { TypeOrmModuleOptions } from '@nestjs/typeorm';

export const typeOrmConfig: TypeOrmModuleOptions = {
  type: 'mysql',
  host: 'localhost',
  port: 3306,
  username: 'root',
  password: 'password',
  database: 'blog',
  entities: [__dirname + '/../**/*.entity{.ts,.js}'],
  synchronize: true,
};

创建实体

src/entities 文件夹中,创建一个新的文件 Post.ts,并添加以下内容:

import { Entity, PrimaryGeneratedColumn, Column, CreateDateColumn, UpdateDateColumn } from 'typeorm';

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

  @Column()
  title: string;

  @Column()
  content: string;

  @CreateDateColumn()
  createdAt: Date;

  @UpdateDateColumn()
  updatedAt: Date;
}

创建模块

src/modules 文件夹中,创建一个新的文件 post.module.ts,并添加以下内容:

import { Module } from '@nestjs/common';
import { PostService } from './post.service';
import { PostController } from './post.controller';
import { TypeOrmModule } from '@nestjs/typeorm';
import { Post } from '../entities/Post';

@Module({
  imports: [TypeOrmModule.forFeature([Post])],
  providers: [PostService],
  controllers: [PostController],
})
export class PostModule {}

创建服务

src/modules/post 文件夹中,创建一个新的文件 post.service.ts,并添加以下内容:

import { Injectable } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import { Repository } from 'typeorm';
import { Post } from '../entities/Post';

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

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

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

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

  async update(id: number, post: Post): Promise<Post> {
    const existingPost = await this.postRepository.findOne(id);
    existingPost.title = post.title;
    existingPost.content = post.content;
    return await this.postRepository.save(existingPost);
  }

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

创建控制器

src/modules/post 文件夹中,创建一个新的文件 post.controller.ts,并添加以下内容:

import { Controller, Get, Post, Put, Delete, Body, Param } from '@nestjs/common';
import { PostService } from './post.service';
import { Post } from '../entities/Post';

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

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

  @Get(':id')
  async findOne(@Param('id') id: number): Promise<Post> {
    return await this.postService.findOne(id);
  }

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

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

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

运行项目

npm run start

结语

通过本教程,我们已经学会了如何使用 Nest.js 和 TypeORM 来构建一个简单的博客后端。当然,这个后端还很基础,还需要更多的功能才能成为一个完整的博客系统。在下一篇教程中,我们将继续完善这个后端,添加更多的功能。