NestJs简明教程
配置环境
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连接
安装TypeORM:
npm install typeorm --save
需要安装依赖模块
reflect-metadata
:npm install reflect-metadata --save
在应用里全局引用一下:
- 比如在app.ts的入口处
require("reflect-metadata")
- 比如在app.ts的入口处
你可能需要安装node类型:
npm install @types/node --save
安装PostgreSQL数据库驱动:
npm install pg --save
确保你的TypeScript编译器的版本大于2.3,并且在
tsconfig.json
开启下面设置:"emitDecoratorMetadata": true, "experimentalDecorators": true,
同时需要开启编译选项里的
lib
下的es6
或者从@typings
安装es6-shim
在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简明教程相关推荐
- CGIC简明教程(转摘)
CGIC简明教程 本系列的目的是演示如何使用C语言的CGI库"CGIC"完成Web开发的各种要求. ********************************* 基础 ...
- kangle web server源代码安装简明教程
kangle web server源代码安装简明教程 - kangle使用交流 - kangle软件 是一款高性能web服务器,反向代理服务器,提供虚拟主机管理系统及代理服务器,web服务器架设 - ...
- CentOs6.5中安装和配置vsftp简明教程
这篇文章主要介绍了CentOs6.5中安装和配置vsftp简明教程,需要的朋友可以参考下 一.vsftp安装篇 复制代码代码如下: # 安装vsftpd yum -y install vsftpd # ...
- sqlalchemy mysql_SQLAlchemy简明教程
原文可见:SQLAlchemy简明教程 - Jiajun的编程随想 SQLAlchemy是Python中常用的一个ORM,SQLAlchemy分成三部分: ORM,就是我们用类来表示数据库schema ...
- python tcp server_python scoket 编程 | tcp server client - 简明教程
TCP 和 UDP 的区别 这两个协议都是传输层的协议,解决的问题,都是端口与端口的通信问题. TCP 每次建立通信,都需要三次握手,确定双方状态完毕,在发送数据.如果发送的数据出现了异常,TCP 也 ...
- 简明python教程pdf-python简明教程中文pdf
python简明教程中文pdf电子书是作者通过自己对计算机语言多年来的研究和学习得出的学习经验,对于python新手来说非常有用,值得大家下载学习. python简明教程中文pdf文章目录 1.介绍 ...
- 简明python教程在线-Python简明教程
Python简明教程在线阅读地址: https://bop.molun.net/ DocStrings 该文档字符串所约定的是一串多行字符串,其中第一行以某一大写字母开始,以句号结束.第二行为空行,后 ...
- linux 防火墙iptables简明教程
前几天微魔部落再次遭受到个别别有用心的攻击者的攻击,顺便给自己充个电,复习了一下linux下常见的防火墙iptables的一些内容,但是无奈网上的很多教程都较为繁琐,本着简明化学习的目的,微魔为大家剔 ...
- Python re(正则表达式)简明教程
Python re(正则表达式)简明教程(Python3) 举个栗子 常用函数举例 按字母顺序查询模块
最新文章
- 性能超越最新序列推荐模型,华为诺亚方舟提出记忆增强的图神经网络
- np.reshape 中的 -1 参数
- linux 下共享库创建及使用
- io.js 3.0发布:重写Buffer,支持PPC
- 定位 - MapKit-自定义大头针
- 部分网站为什么上不去_企业网站如何霸占搜索引擎首页
- boost::graph模块实现内部pmap捆绑的测试程序
- java并发编程之美-阅读记录3
- Meaven的pom文件配置
- XML文件的写入和读取(解析)基于DOM4J工具
- python设计与调试[摘自笨方法学python]
- 一起谈.NET技术,基于CallContextInitializer的WCF扩展导致的严重问题
- 《Python极客项目编程 》——2.4 完整代码
- Mac OS git多次需要输入用户名密码config解决
- wxparse使用(富文本插件)
- 在线TSV转JSON工具
- Loadrunner11
- 学习springcloud
- java实现麦克风自动录音
- 为永嘉路故店合弛的宣扬口号毛病援用“法租界”做替店址的描述
热门文章
- 2011高教社杯全国大学生数学建模竞赛题目(MATLAB)
- 【官方】2023年“中国软件杯”大学生软件设计大赛飞桨小汪赛道基线系统
- 大型综合网络搭建详细步骤教程
- 鼠标坏了怎么用键盘操作鼠标
- python图像切割成多边形_python通过opencv实现图片裁剪原理解析
- 国产化飞腾CPU主板安装统信专业版桌面OS,以及统信OS如何进root用户
- socket c语言 AF_TIPC,socket编程 send() recv() sendto() recvfrom()
- 【Luat-esp32】3.陀螺仪-mpu6050
- QA是干什么的?(职责所在????)
- XCTF新手练习区 writeup