配置环境

1.下载并安装nodejs

2.下载并安装vscode

3.为vscode安装中文插件

​ 在扩展应用栏搜索并安装 Chinese (Simplified) Language

4.检查nodejs和npm是否安装成功

node -v
npm -v

5.cnpm安装

npm install cnpm -g --registry=https://registry.npm.taobao.org

检测cnpm安装是否成功

cnpm -v

创建Nestjs项目

安装nest cli

cnpm i -g @nestjs/cli

初始化项目

nest new rpd-api

运行项目

npm run start

数据库ORM连接

  1. 安装TypeORM:

    npm install typeorm --save
    
  2. 需要安装依赖模块 reflect-metadata :

    npm install reflect-metadata --save
    

    在应用里全局引用一下:

    • 比如在app.ts的入口处 require("reflect-metadata")
  3. 你可能需要安装node类型:

    npm install @types/node --save
    
  4. 安装PostgreSQL数据库驱动:

    npm install pg --save
    
  5. 确保你的TypeScript编译器的版本大于2.3,并且在tsconfig.json开启下面设置:

    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    

    同时需要开启编译选项里的lib下的es6或者从@typings安装es6-shim

  6. 在app.module.ts中配置数据库连接

    import { Module } from '@nestjs/common';
    import { TypeOrmModule } from '@nestjs/typeorm';
    @Module({imports: [TypeOrmModule.forRoot({type: 'mysql',host: 'localhost',port: 3306,username: 'root',password: 'root',database: 'test',entities: [__dirname + '/**/*.entity{.ts,.js}'],synchronize: true,}),],
    })
    export class AppModule {}
    

控制器controller

Nest中的控制器层负责处理传入的请求, 并返回对客户端的响应。

1.新建控制器

D:\Chiaot\nodejs\nestjs\robot-demo-api>nest g controller article

nest g controller role --no-spec

此时会在src文件夹下出现一个article文件夹

2.Get请求

在controller文件中操作

import { Controller, Get } from '@nestjs/common';@Controller('article')
export class ArticleController {//http://127.0.0.1:3000/article/访问@Get()index(){return '这是新闻的articel界面'}//http://127.0.0.1:3000/article/add访问@Get('/add')add(){return '这是新闻的add界面'}
}

3.其他请求

import { Controller, Get,Post,Put, Delete,Patch,Options,Head,All } from '@nestjs/common';@Controller('article')
export class ArticleController {//http://127.0.0.1:3000/article/访问@Get()index(){return '这是新闻的articel界面'}//http://127.0.0.1:3000/article/add访问@Get('/add')add(){return '这是新闻的add界面'}@Post()indexPost(){return {message:"这个一个Post请求"}}@Delete()indexDelete(){return {message:"这个一个Delete请求"}}@Put()indexPut(){return {message:"这个一个put请求"}}@Patch()indexPatch(){return {message:"这个一个Patch请求"}}@Options()indexOptions(){return {message:"这个一个Options请求"}}@Head()indexHead(){return {message:"这个一个Head请求"}}@All('/all')indexAll(){return {message:"这个一个All请求"}}
}

GET(完整请求一个资源)
POST(提交表单)
PUT(上传文件)
DELETE(删除)
PATCH(对某个资源做部分修改)
HEAD(仅请求响应首部)
OPTIONS(返回请求的资源所支持的方法)
TRACE(追求一个资源请求中间所经过的代理)

参数传递

@body()

import { Controller, Get,Post,Put, Delete,Patch,Options,Head,All } from '@nestjs/common';export class CreateDto {title: stringcontent: stringauthor: string
}@Controller('article')
export class ArticleController {//http://127.0.0.1:3000/article/访问@Post()indexPost(@Body() data: CreateDto){const test = new Test();test.title = data.title;test.content = data.title;test.author = data.authorreturn {message:"这个一个Post请求"}}
}

@Param()

import { Controller, Get,Post,Put, Delete,Patch,Options,Head,All } from '@nestjs/common';@Controller('article')
export class ArticleController {//http://127.0.0.1:3000/article/3/@Get(':id')findOne(@Param() params): string {console.log(params.id);return `This action returns a #${params.id} cat`;}
}

@Query

import { Controller, Get,Post,Put, Delete,Patch,Options,Head,All } from '@nestjs/common';@Controller('article')
export class ArticleController {//http://127.0.0.1:3000/article/?page=1&size=3@Get()indexPost(@Query() query){const page = query.pageconst size = query.sizereturn {message:"OK"}}
}

树实体

创建树实体

import {Entity, Tree, Column, PrimaryGeneratedColumn, TreeChildren, TreeParent, TreeLevelColumn} from "typeorm";
@Entity()
@Tree("materialized-path")
export class Category {@PrimaryGeneratedColumn()id: number;@Column()name: string;@TreeChildren()children: Category[];@TreeParent()parent: Category;
}

使用树实体

const manager = getManager();
const a1 = new Category("a1");
a1.name = "a1";
await manager.save(a1);const a11 = new Category();
a11.name = "a11";
a11.parent = a1;
await manager.save(a11);

查询树形结构

const manager = getManager();
const trees = await manager.getTreeRepository(Category).findTrees();

统计子菜单

const manager = getManager();
const menuItem = await manager.getTreeRepository(Menu).findOne({where: { id: params.id },
});
console.log(menuItem);// 统计子菜单
const childrenCount = await manager.getTreeRepository(Menu).countDescendants(menuItem);
console.log(childrenCount);

ORM操作

筛选查询字段

userRepository.find({select: ["firstName", "lastName"]
});

加载子关系或关系主体

userRepository.find({relations: ["profile", "photos", "videos"]
});

条件查询

userRepository.find({where: {firstName: "Timber",lastName: "Saw"}
});

或查询(可用于不同字段等于同一个值)

userRepository.find({where: [{firstName: "Timber", lastName: "Saw" }, { firstName: "Stan",lastName: "Lee" }]
});

分页查询

Menu.findAndCount({skip: (page - 1) * size,take: size,});

nodejs获取IP

/*** @getClientIP* @desc 获取用户 ip 地址* @param {Object} req - 请求*/
function getClientIP(req) {return req.headers['x-forwarded-for'] || // 判断是否有反向代理 IPreq.connection.remoteAddress || // 判断 connection 的远程 IPreq.socket.remoteAddress || // 判断后端的 socket 的 IPreq.connection.socket.remoteAddress;
};

GitLab使用

PS D:\RPD\rpd-api> git status
PS D:\RPD\rpd-api> git add .
PS D:\RPD\rpd-api> git commit -m "推送"
PS D:\RPD\rpd-api> git push
PS D:\RPD\rpd-api>

NestJs简明教程相关推荐

  1. CGIC简明教程(转摘)

    CGIC简明教程 本系列的目的是演示如何使用C语言的CGI库"CGIC"完成Web开发的各种要求. *********************************     基础 ...

  2. kangle web server源代码安装简明教程

    kangle web server源代码安装简明教程 - kangle使用交流 - kangle软件 是一款高性能web服务器,反向代理服务器,提供虚拟主机管理系统及代理服务器,web服务器架设 - ...

  3. CentOs6.5中安装和配置vsftp简明教程

    这篇文章主要介绍了CentOs6.5中安装和配置vsftp简明教程,需要的朋友可以参考下 一.vsftp安装篇 复制代码代码如下: # 安装vsftpd yum -y install vsftpd # ...

  4. sqlalchemy mysql_SQLAlchemy简明教程

    原文可见:SQLAlchemy简明教程 - Jiajun的编程随想 SQLAlchemy是Python中常用的一个ORM,SQLAlchemy分成三部分: ORM,就是我们用类来表示数据库schema ...

  5. python tcp server_python scoket 编程 | tcp server client - 简明教程

    TCP 和 UDP 的区别 这两个协议都是传输层的协议,解决的问题,都是端口与端口的通信问题. TCP 每次建立通信,都需要三次握手,确定双方状态完毕,在发送数据.如果发送的数据出现了异常,TCP 也 ...

  6. 简明python教程pdf-python简明教程中文pdf

    python简明教程中文pdf电子书是作者通过自己对计算机语言多年来的研究和学习得出的学习经验,对于python新手来说非常有用,值得大家下载学习. python简明教程中文pdf文章目录 1.介绍 ...

  7. 简明python教程在线-Python简明教程

    Python简明教程在线阅读地址: https://bop.molun.net/ DocStrings 该文档字符串所约定的是一串多行字符串,其中第一行以某一大写字母开始,以句号结束.第二行为空行,后 ...

  8. linux 防火墙iptables简明教程

    前几天微魔部落再次遭受到个别别有用心的攻击者的攻击,顺便给自己充个电,复习了一下linux下常见的防火墙iptables的一些内容,但是无奈网上的很多教程都较为繁琐,本着简明化学习的目的,微魔为大家剔 ...

  9. Python re(正则表达式)简明教程

    Python re(正则表达式)简明教程(Python3) 举个栗子 常用函数举例 按字母顺序查询模块

最新文章

  1. 性能超越最新序列推荐模型,华为诺亚方舟提出记忆增强的图神经网络
  2. np.reshape 中的 -1 参数
  3. linux 下共享库创建及使用
  4. io.js 3.0发布:重写Buffer,支持PPC
  5. 定位 - MapKit-自定义大头针
  6. 部分网站为什么上不去_企业网站如何霸占搜索引擎首页
  7. boost::graph模块实现内部pmap捆绑的测试程序
  8. java并发编程之美-阅读记录3
  9. Meaven的pom文件配置
  10. XML文件的写入和读取(解析)基于DOM4J工具
  11. python设计与调试[摘自笨方法学python]
  12. 一起谈.NET技术,基于CallContextInitializer的WCF扩展导致的严重问题
  13. 《Python极客项目编程 》——2.4 完整代码
  14. Mac OS git多次需要输入用户名密码config解决
  15. wxparse使用(富文本插件)
  16. 在线TSV转JSON工具
  17. Loadrunner11
  18. 学习springcloud
  19. java实现麦克风自动录音
  20. 为永嘉路故店合弛的宣扬口号毛病援用“法租界”做替店址的描述

热门文章

  1. 2011高教社杯全国大学生数学建模竞赛题目(MATLAB)
  2. 【官方】2023年“中国软件杯”大学生软件设计大赛飞桨小汪赛道基线系统
  3. 大型综合网络搭建详细步骤教程
  4. 鼠标坏了怎么用键盘操作鼠标
  5. python图像切割成多边形_python通过opencv实现图片裁剪原理解析
  6. 国产化飞腾CPU主板安装统信专业版桌面OS,以及统信OS如何进root用户
  7. socket c语言 AF_TIPC,socket编程 send() recv() sendto() recvfrom()
  8. 【Luat-esp32】3.陀螺仪-mpu6050
  9. QA是干什么的?(职责所在????)
  10. XCTF新手练习区 writeup