Skip to content

Realybig/nft-info-project-backend

Repository files navigation

Nest Logo

A progressive Node.js framework for building efficient and scalable server-side applications.

NPM Version Package License NPM Downloads CircleCI Coverage Discord Backers on Open Collective Sponsors on Open Collective Support us

项目描述

使用 Nest 编写的数藏说明书后端 Demo

如何创建项目模块

使用如下命令会自动在 src 下创建对应目录及 module 和 controller 文件

# 创建 xxx 模块
nest g module xxx

# 创建 xxx controller
# --no-spec 不生成测试文件
nest g controller xxx --no-spec

# 创建 xxx 服务
nest g service xxx --no-spec

如何添加业务路径

路径统一交给 controller 处理,所以路径添加也在 controller 中,如:

// 根路径为 hc
@Controller('hc')
// 下面写方法
export class HcController {
    // 业务路径 list
    @Get('list')
    getList():any {
        return this.hcService.getItemList()
    }
}

如何加入项目公共路径

实际开发中会在域名后,模块前加入公共路径作为业务识别,如:www.xxx.com/api/xxx,这里只需在 main.ts 文件中的 await app.listen(3000) 代码上一行加入下面代码即可。

app.setGlobalPrefix('api')

GET/POST 请求

getpost 请求需要在 controller 中引入对应的模块,获取参数可以使用 Request 模块,也可以对应 get 使用 Query 模块,post 使用 Body 模块来获取参数,并且对应使用 @Query() 装饰器和 @Body() 装饰器

get 请求中 query 返回的是字符串,因此 id 一类的需要使用 number 类型的数据需要用 parseInt 方法转换

如果是动态路由需要使用 Request 中的 params 来获取路由参数,或者使用 Param 模块,直接使用 params 来获取路由参数

import { Controller, Get, Post, Request, Query, Body } from '@nestjs/common';

@Post('additem')
addItem(@Body() body): any {
    console.log(body)
}

@Get('getItemDetail')
getItemDetail(@Query() query): any {
    let id:number = parseInt(query.id)
}

// 动态路由方式
@Get('getItemDetail/:id/:name')
getItemDetail(@Param() params): any {
    let id: number = parseInt(params.id)
    return this.hcService.getItemDetail(id)
}

使用 RESTClient 测试请求

在 src 目录下新建文件夹 RESTClient 在目录下新建一个 http 文件,命名为 demo.http

基本使用方法

# get 请求方法
GET http://localhost:3000/xxx HTTP/1.1
# 带有参数
?id=1

# POST 请求方法
POST http://localhost:3000/xxx
# 请求协议
application/type=json
# 请求参数
{
  "id": 1,
  "name": "柒飝龍"
}

TypeORM 安装及配置

# TypeORM 安装及 MySQL 扩展安装
pnpm install @nestjs/typeorm typeorm mysql2

配置 TypeORM

// app.module.ts
// 引入 typeORM 模块
import { TypeOrmModule } from '@nestjs/typeorm';

@Module({
  imports: [
    // 配置 TypeORM 
    TypeOrmModule.forRoot({
      // 数据库类型
      type: 'mysql',
      // 数据库地址
      host: 'localhost',
      // 数据库端口
      port: 3306,
      // 用户名
      username: '',
      // 密码
      password: '',
      // 数据库名称
      database: 'nft-info',
      // 重试链接数据库间隔
      retryDelay: 500,
      // 重试次数
      retryAttempts: 10,
      // synchronize: true
    }),
    HcModule,
  ],
  controllers: [],
  providers: [],
})

TypeORM 中的实体 Entities

ORM 中的实体其实就是把数据库映射成对象的那个类,这个类可以模拟数据库表,定义其中的字段。

因为映射的过程 ORM 已经为我们做好了,所以我们只需要定义实体类,当实体类定义好以后,就可以操作数据库了,这里所谓的实体就是 Object

flowchart LR;
     Object --> Mapping --> DB;
Loading

Description

Nest framework TypeScript starter repository.

Installation

$ npm install

Running the app

# development
$ npm run start

# watch mode
$ npm run start:dev

# production mode
$ npm run start:prod

Test

# unit tests
$ npm run test

# e2e tests
$ npm run test:e2e

# test coverage
$ npm run test:cov

About

一个使用 NESTJS 搭建的数字藏品说明书后端

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published