返回

Nest.js从0到1搭建博客系统---Ts+Axios 二次封装(12)

前端

前言

Nest.js 是一个渐进式的 Node.js 框架,用于构建高效、可测试和可扩展的服务器端应用程序。TypeScript 是一种由微软开发的开源编程语言,是 JavaScript 的超集,具有类型系统和面向对象的特性。Axios 是一个基于 promise 的 HTTP 库,可以用在浏览器和 node.js 中。

搭建博客系统

1. 安装 Nest.js 和 TypeScript

首先,我们需要安装 Nest.js 和 TypeScript。可以使用以下命令进行安装:

npm install -g @nestjs/cli
npm install -g typescript

安装完成后,就可以使用以下命令创建一个新的 Nest.js 项目:

nest new blog

2. 安装 Axios

接下来,我们需要安装 Axios 库。可以使用以下命令进行安装:

npm install axios

3. 创建模块

在 Nest.js 中,模块是应用程序的逻辑单元。每个模块都可以包含自己的控制器、服务、管道和过滤器。

首先,我们需要创建一个新的模块。可以使用以下命令创建:

nest generate module blog

4. 创建控制器

控制器是处理 HTTP 请求的类。在 Nest.js 中,控制器使用 @Controller() 装饰器进行修饰。

首先,我们需要创建一个新的控制器。可以使用以下命令创建:

nest generate controller blog

5. 创建服务

服务是处理业务逻辑的类。在 Nest.js 中,服务使用 @Injectable() 装饰器进行修饰。

首先,我们需要创建一个新的服务。可以使用以下命令创建:

nest generate service blog

6. 配置路由

在 Nest.js 中,路由是将 HTTP 请求映射到控制器的类和方法的规则。

首先,我们需要在 src/app.module.ts 文件中配置路由。可以使用以下代码进行配置:

@Module({
  controllers: [BlogController],
  providers: [BlogService],
})
export class AppModule {}

7. 二次封装 Axios

在 Nest.js 中,我们可以使用 @Injectable() 装饰器来将类注入到其他类中。

首先,我们需要创建一个新的类来二次封装 Axios。可以使用以下代码创建:

@Injectable()
export class HttpService {
  constructor(private axios: AxiosInstance) {}

  get(url: string, config?: AxiosRequestConfig): Promise<AxiosResponse> {
    return this.axios.get(url, config);
  }

  post(url: string, data?: any, config?: AxiosRequestConfig): Promise<AxiosResponse> {
    return this.axios.post(url, data, config);
  }

  put(url: string, data?: any, config?: AxiosRequestConfig): Promise<AxiosResponse> {
    return this.axios.put(url, data, config);
  }

  delete(url: string, config?: AxiosRequestConfig): Promise<AxiosResponse> {
    return this.axios.delete(url, config);
  }
}

然后,我们需要在 src/app.module.ts 文件中将 HttpService 类注入到 BlogService 类中。可以使用以下代码进行注入:

@Module({
  controllers: [BlogController],
  providers: [BlogService, HttpService],
})
export class AppModule {}

8. 使用二次封装的 Axios

现在,我们就可以在 BlogService 类中使用二次封装的 Axios 库了。可以使用以下代码进行使用:

export class BlogService {
  constructor(private httpService: HttpService) {}

  getPosts(): Promise<AxiosResponse> {
    return this.httpService.get('/posts');
  }

  getPost(id: number): Promise<AxiosResponse> {
    return this.httpService.get(`/posts/${id}`);
  }

  createPost(post: Post): Promise<AxiosResponse> {
    return this.httpService.post('/posts', post);
  }

  updatePost(id: number, post: Post): Promise<AxiosResponse> {
    return this.httpService.put(`/posts/${id}`, post);
  }

  deletePost(id: number): Promise<AxiosResponse> {
    return this.httpService.delete(`/posts/${id}`);
  }
}

结语

在本文中,我们介绍了如何使用 Nest.js 和 TypeScript 从头开始搭建一个博客系统。我们还使用 Axios 库对 HTTP 请求进行二次封装,以简化与后端 API 的交互。希望本文对您有所帮助。