NestJS 环境搭建 、创建运行 NestJS 项目
1、电脑上面必须安装 nodejs 环境,推荐安装 nodejs 最新稳定版本
2、安装 Nest CLI 以及使用 Nest CLI 创建项目
安装 Nest CLI:
npm i -g @nestjs/cli
或者 cnpm i -g @nestjs/cli 或者 yarn global add @nestjs/cli
使用 Nest CLI 创建项目:
nest new nestdemo
NestJS 中的控制器
Nest 中的控制器层负责处理传入的请求, 并返回对客户端的响应
控制器的目的是接收应用的特定请求。路由机制控制哪个控制器接收哪些请求。通常,
每个控制器有多个路由,不同的路由可以执行不同的操作
可以通过 NestCLi 创建控制器:
nest g controller news
热更新 npm run start:dev
main.js -- app.module.ts app.controller.ts app.service.ts
// 路由
@Get('news')
getNews():string{
//return '这是 nest里面自定义的方法 页面 路由';
return this.appService.getProduct();
}
import { Injectable } from '@nestjs/common';
@Injectable()
export class AppService {
getHello(): string {
return '你好 222';
}
getProduct():string{
return '这是路由控制器';
}
}
NestJS 中的路由
Nestjs 中没有单独配置路由的地方。定义好控制器后 nestjs 会自动给我们配置对应的路由。
下面代码定义了一个新闻控制器。装饰器为@Controller('article'),装饰器参数里面的'article'
就是我们的路由。
如果我们要返回 index 方法里面的内容我们在浏览器输入 http://localhost:3000/article
如果我们要返回 add 方法里面的内容我们在浏览器输入 http://localhost:3000/article/add
import { Controller, Get } from '@nestjs/common';
@Controller('article')
export class ArticleController {
@Get()
index(): string {
return ‘这是 article 里面的 index’;
}
@Get(‘add’)
add(): string {
return ‘这是 article 里面的 index’;
}
}
NestJS 中的 Get Post 以及通过方法参数装饰器获取传值
1、首先看一个 Get Post 请求的例子,注意我们使用 nestjs 内置装饰器的时候必须得在
@nestjs/common 模块下面引入对应的装饰器。
Nestjs 也提供了其他 HTTP 请求方法的装饰器 @Put() 、@Delete()、@Patch()、
@Options()、 @Head()和 @All()
Nestjs 中获取请求参数
在 Nestjs 中获取 Get 传值或者 Post 提交的数据的话我们可以使用 Nestjs 中的装饰器来获取。
`
import { Controller,Get,Post, Query,Body,Param,Request } from '@nestjs/common';
// 装饰器
@Controller('artcle')
export class ArtcleController {
// 配置路由
// http://localhost:3000/artcle
@Get()
index(){
return '我是一个文章页面'
}
@Post()
create():string{
return 'this action adds a new cat'
}
// nestjs中获取请求参数
// http://localhost:3000/artcle/about?id=123&name=xiaoming
@Get('about')
getAbout(@Query() query):string{
console.log(query) // { id: '123', name: 'xiaoming' }
return query
}
// http://localhost:3000/artcle/list?id=999
@Get('list')
getNews(@Query('id') query):string{
console.log(query) // 这里获取的就是get传值里面的id的值 999
return query
}
// http://localhost:3000/artcle/edit?id=123&name=xiaoming
// { id: '123', name: 'xiaoming' }
@Get('edit')
editData(@Request() req){
console.log(req.query)
return '通过reque获取get传值'
}
// http://localhost:3000/artcle/doAdd
/**
*
* @param newsData
* body json
* {"data":"546546"}
* @returns
*/
@Post('doAdd')
async addNews(@Body() newsData){
console.log(newsData) // {"data":"546546"}
return '增加新闻';
}
//动态路由
// http://localhost:3000/artcle/123
@Get(":id")
findOne(@Param() params):string{
console.log(params.id);//123
return `this action return a ${params.id} cat`;
}
}
Nestjs 中使用模板引擎和配置静态资源
在根目录新建 public 目录,然后在目录里面保存一个图片比如 1.jpg,这样就可以通过
http://localhost:3000/1.jpg 来访问图片。
NestJS 中配置模板引擎
1、安装对应的模板引擎 比如 ejs
cnpm i ejs --save
2、配置模板引擎
app.setBaseViewsDir(join(__dirname, '..', 'views')) // 放视图的文件
app.setViewEngine('ejs');
NestJS 中模板引擎结合 Post 演示、以及路由跳转
Nestjs 中的服务
关于 NestJS 中的服务
Nestjs 中的服务可以是 service 也可以是 provider。他们都可以通过 constructor 注 入依赖关系。服务本质上就是通过@Injectable() 装饰器注解的类。在 Nestjs 中服务相当于 MVC 的 Model。
NestJS 中创建和使用服务
1、创建服务 nest g service 模块名
Nestjs 中的 Cookie
HTTP 是无状态协议。简单地说,当你浏览了一个页面,然后转到同一个网站的另一个页
面,服务器无法认识到这是同一个浏览器在访问同一个网站。每一次的访问,都是没有任何
关系的。如果我们要实现多个页面之间共享数据的话我们就可以使用 Cookie 或者 Session 实
现
● cookie 是存储于访问者的计算机中的变量。可以让我们用同一个浏览器访问同一个域
名的时候共享数据
Nestjs 中使用 Cookie
NestJs 中使用 Cookie 的话我们可以用 cookie-parser 来实现。
1.安装
cnpm instlal cookie-parser --save
npm i -D @types/cookie-parser
属性说明:
domain: 域名
expires : 过 期 时 间 ( 秒 ) , 在 设 置 的 某 个 时 间 点 后 该 Cookie 就 会 失 效 , 如
expires=Wednesday, 09-Nov-99 23:12:40 GMT
maxAge: 最大失效时间(毫秒),设置在多少后失效
secure: 当 secure 值为 true 时,cookie 在 HTTP 中是无效,在 HTTPS 中才有效
path: 表示 cookie 影响到的路,如 path=/。如果路径不能匹配时,浏览器则不发送这
个 Cookie
httpOnly:是微软对 COOKIE 做的扩展。如果在 COOKIE 中设置了“httpOnly”属性,则通
过程序(JS 脚本、applet 等)将无法读取到 COOKIE 信息,防止 XSS 攻击产生
signed : 表 示 是 否 签 名 cookie, 设 为 true 会 对 这 个 cookie 签 名 , 这 样 就 需 要 用
res.signedCookies 而不是 res.cookies 访问它。被篡改的签名 cookie 会被服务器拒绝,并且
cookie 值会重置为它的原始值
获取 cookie req.cookies.属性名
删除 cookie res.cookie('rememberme', '', { expires: new Date(0)});
res.cookie('username','zhangsan',{domain:'.ccc.com',maxAge:0,httpOnly:true});
Nestjs 中 Session 的使用
session 是另一种记录客户状态的机制,不同的是 Cookie 保存在客户端浏览器中,而 session 保存
在服务器上。
Session 的工作流程
当浏览器访问服务器并发送第一次请求时,服务器端会创建一个 session 对象,生成一个类似于key,value 的键值对,然后将 key(cookie)返回到浏览器(客户)端,浏览器下次再访问时,携带 key(cookie),找到对应的 session(value)。 客户的信息都保存在 session 中
Nestjs 中 express-session 的使用: 1、安装 express-session npm i express-session --save npm i -D @types/express-session --save
2、引入 express-session
import * as session from 'express-session';
- 设置官方文档提供的中间件
app.use(session({ secret: 'keyboard cat', cookie: { maxAge: 60000 }}))
- 使用 设置值 req.session.username = "张三";
获取值 req.session.username
五、 express-session 的常用方法: