第一步:基于node创建一个Nest.js项目

第二步:创建写接口的模块,建立moogodb数据库连接,写添加与查询接口

1.介绍Nest.js

  • Nest 是一个用于构建高效,可扩展的 Node.js 服务器端应用程序的框架。它使用渐进式 JavaScript,内置并完全支持 TypeScript(但仍然允许开发人员使用纯 JavaScript 编写代码)并结合了 OOP(面向对象编程),FP(函数式编程)和 FRP(函数式响应编程)的元素。

  • 在底层,Nest使用强大的 HTTP Server 框架,如 Express(默认)和 Fastify。Nest 在这些框架之上提供了一定程度的抽象,同时也将其 API 直接暴露给开发人员。这样可以轻松使用每个平台的无数第三方模块。

  • Nset.js文档地址

  • 我自己尝试写过一个完整的项目,虽然只有权限控制跟删查改写,但基本功能还是有的,使用的是moogodb,同时有跟我写的Nest项目配套的前端项目可以更直观的去体验功能与调试。

  • Nest项目地址

2.安装Nest CLI

npm i -g @nestjs/cli // 全局安装脚手架
 nest new project-name // 创建一个基础的Nest.js项目
 npm run start:dev // Nest.js 启动命令
  • 将会创建 project-name 目录, 安装 node_modules 和一些其他样板文件,并将创建一个 src 目录,目录中包含几个核心文件。
src
 ├── app.controller.spec.ts
 ├── app.controller.ts
 ├── app.module.ts
 ├── app.service.ts
 └── main.ts
  • 以下是这些核心文件的简要概述:
    app.controller.ts 带有单个路由的基本控制器示例。
    app.controller.spec.ts 对于基本控制器的单元测试样例
    app.module.ts 应用程序的根模块。
    app.service.ts 带有单个方法的基本服务
    main.ts 应用程序入口文件。它使用 NestFactory 用来创建 Nest 应用实例。

3.创建子模块

  • 一般app开头的模块期望是去用作管理所有子模块

  • 此时需要创建一个模块与控制器:
    模块可以理解成一个集中控制的区域。
    控制器负责处理传入的请求和向客户端返回响应。

3.1创建模块与控制器
// 创建模块
nest g module 模块名称
// 创建控制器
nest g controller 控制器名称
  • **当然有更简洁的命令,在终端输入nest -h

    **
  • 然后就可以看到有很多命令跟简化版,此时就可以试试简化版
// 创建模块 cat 自己定义的名字
nest g mo cat
// 创建控制器 cat 自己定义的名字
nest g co cat
  • 此时就可以在主模块app.module.ts里看到子模块控制器CatController自动被挂载到了主模块上,是不是感觉很像Vue的App入口文件,此时主模块的代码是这样的:
import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { CatController } from './cat/cat.controller';
import { CatModule } from './cat/cat.module';

@Module({
  imports: [CatModule],
  controllers: [AppController, CatController],
  providers: [AppService],
})
export class AppModule {}

4.体验Nest.js的接口调用

4.1调用接口(依赖注入方式)
  • 可以在app.controller.ts文件里明确的看到有一个写好的接口,左边为接口定义,右边为响应的数据,采用的依赖注入的方式写入的,此时看main.ts文件可以看到端口跑在3000上,此时用postman调用下试试,接口响应了定义的返回值
4.2调用接口(不用依赖注入)
  • 可能刚开始还不太了解依赖注入或者觉得这样写太麻烦,那就给改造下
  • 更过测试,接口返回值还是没变化,证明改造没问题

5.Nest.js具体描述

  • Nest 旨在成为一个与平台无关的框架。 由于平台无关性,我们以创建可重用的逻辑组件,开发人员可以跨越多种不同类型的应用程序来使用这些组件。 从技术上讲,创建了适配器以后,Nest 可以与任何 node.js 的 HTTP 框架一起工作。如果你有express基础,那么Nest.js完全兼容
  • Nest.js主要使用装饰器,如果你用了解SpringBoot会发现这种写法更偏向于Java
  • Nest.js会暴露很多固定的API,很多时候并不需要关心具体逻辑,就能快速上手,只需调用固定的API就可以实现想要的功能
  • Nest.js的各种连接主要是使用的依赖注入,是这样描述的:
    依赖注入(Providers) 是 Nest 的一个基本概念。许多基本的 Nest 类可能被视为 provider - service, repository, factory, helper 等等。 他们都可以通过 constructor 注入依赖关系。 这意味着对象可以彼此创建各种关系,并且“连接”对象实例的功能在很大程度上可以委托给 Nest运行时系统。 Provider 只是一个用 @Injectable() 装饰器注释的类。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
首先,需要安装 `@nestjs/typeorm` 和 `typeorm` 依赖,用于连接数据库和操作数据库。 然后,在 Nest.js创建一个 Service: ```typescript import { Injectable } from '@nestjs/common'; import { InjectRepository } from '@nestjs/typeorm'; import { Repository } from 'typeorm'; import { User } from './user.entity'; @Injectable() export class UserService { constructor( @InjectRepository(User) private readonly userRepository: Repository<User>, ) {} async findAll(): Promise<User[]> { return this.userRepository.find(); } async findOneById(id: number): Promise<User> { return this.userRepository.findOne(id); } async create(user: User): Promise<User> { return this.userRepository.save(user); } async update(id: number, user: User): Promise<User> { await this.userRepository.update(id, user); return this.userRepository.findOne(id); } async delete(id: number): Promise<void> { await this.userRepository.delete(id); } } ``` 在这个 Service 中,我们使用 `@InjectRepository(User)` 注解来注入 `User` 实体类的 Repository 对象。然后,我们定义了一些方法来操作数据库,例如 `findAll()` 方法用于查询所有用户信息,`findOneById(id: number)` 方法用于根据 id 查询用户信息,`create(user: User)` 方法用于创建用户信息,`update(id: number, user: User)` 方法用于更新用户信息,`delete(id: number)` 方法用于删除用户信息。 最后,我们需要在 Nest.js 中将这个 Service 注册为一个 Provider,例如: ```typescript import { Module } from '@nestjs/common'; import { TypeOrmModule } from '@nestjs/typeorm'; import { UserService } from './user.service'; import { UserController } from './user.controller'; import { User } from './user.entity'; @Module({ imports: [TypeOrmModule.forFeature([User])], providers: [UserService], controllers: [UserController], }) export class UserModule {} ``` 在这个 Module 中,我们使用 `TypeOrmModule.forFeature([User])` 方法来注册 `User` 实体类,并将 `UserService` 注册为一个 Provider。如果需要使用这个 Service,只需要在 Controller 中注入即可。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值