nest.js学习静态资源配置和模板引擎+服务Service+cookie+session

Posted lin-fighting

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了nest.js学习静态资源配置和模板引擎+服务Service+cookie+session相关的知识,希望对你有一定的参考价值。

nest.js配置静态资源


因为nest是基于express,我们得使用@nestjs/platform-express这个东西。
接着我们安装官网的示例敲一遍



配置成功,
起别名

模板引擎配置

nest配置ejs跟express配置是差不多的
npm i ejs --save
配置:
官网

但我们使用的是ejs


建立视图联系。
然后只要控制器中使用

使用装饰器,传入index参数表示要找到该ejs模板,然后就会渲染该模板,return的对象会作为ejs的对象使用


模板引擎就配置好了。

简单总结一下

静态资源开放只需要使用app.useStaticAssets设置静态资源文件的位置,就可以访问到,
而模板引擎主要是使用了ejs模板,
使用app.setBaseViewsDir建立视图联系,
使用app.setViewEngine(‘ejs’)表明使用ejs模板,
在需要用到模板的地方只需要使用Render装饰器,并传入模板文件名即可渲染模板。

案例

使用表单ejs模拟发送请求
准备模板




使用Response装饰器获取res对象,可以使用res.direct进行路由跳转。

服务 Service

nest.js的服务可以是Service也可以是provider,他们都是通过constructor注入依赖关系,如

在这里注册,然后


在控制器的constructor注入依赖关系,这样就在该控制器使用服务。
服务的本质就是通过@Injectable装饰器注解的类

也可以说一个类经过Injectable装饰器装饰过后就变成了服务的类。
在nest.js中,服务就好比mvc的Model层,我们之前实现的数据处理都是在控制器中处理,控制器主要处理一些简单的逻辑,复杂的逻辑主要放在model层,也就是服务中去处理。

nest.js创建服务

nest g service news


如何使用呢,首先在app.module中配置该服务,已经自动配置好了,接着在控制器的构造函数中注入依赖,


然后试下

访问成功。

总结:

Nest.js的服务本质就是一个通过装饰器Injectable装饰过的类,在这里处理复杂的逻辑处理,使用的话需要在model模块中注册,并在控制器的构造函数中去注入依赖,这样在控制器中就可以拿到该类,从而使用其中的一些方法。

cookie

nest中使用Cookie,因为我们是基于express框架的,所以使用cookie-parser这个库来帮助我们实现,
npm i -D @types/cookie-parser --save
npm instlal cookie-parser --save
在mian.ts中引入该模块,


他也是要一个中间件,使用的时候直接app.use就行
设置cookie


获取cookie


成功获取cookie。
cookie的一些参数

删除cookie只需要将其过期时间调为现在即可。

配置加密cookie



配置cookie的时候需开启signed

已经加密,获取cookie也不是通过req.cookies.name来获取,而是


cookie加密完成

session

sessin的功能与cookie很相似,不过cookie是保存在浏览器,而session是保存在服务器。
工作流程:
当浏览器访问服务器并发送第一次请求时,服务器端会创建一个session对象,生成一个类似于key,value的键值对, 然后将key(cookie)返回到浏览器(客户)端,浏览器下次再访问时,携带key(cookie),找到对应的session(value)。 客户的信息都保存在session中
在express中使用Session,
npm i express-session --save
npm i -D @types/express-session --save
在main.ts中配置


在配置中间件这里可以做其他的配置,因为session是基于cookie的。
secret作为服务器端生成session的签名。 ,cookie是过期时间
其他常用参数

secret	一个String类型的字符串,作为服务器端生成session的签名。 
name	返回客户端的key的名称,默认为connect.sid,也可以自己设置。 
resave	强制保存session即使它并没有变化,。默认为true。建议设置成false。 don't save session if unmodified 
saveUninitialized	强制将未初始化的session存储。当新建了一个session且未设定属性或值时,它就处于
未初始化状态。在设定一个cookie前,这对于登陆验证,减轻服务端存储压力,权限控制是有帮助的。(默认:true)。建议手动添加。
cookie	设置返回到前端key的属性,默认值为{ path:/, httpOnly: true, secure: false, maxAge: null }。
rolling	在每次请求时强行设置cookie,这将重置cookie过期时间(默认:false

设置session



此时cookie会存到浏览器,当发送时会携带这个cookie,通过这个cookie找到session,session通常保存着用户信息。

获取session

因为我们刚刚访问上个网址已经设置过session了,相当于登陆过,有了cookie,访问这个的时候就可以拿到该session的信息。

当我们删掉cookie后



此时便不能获取到原来的Name属性了。

该文某些部分参考与IT营的nest教程.(仅作笔记使用)

以上是关于nest.js学习静态资源配置和模板引擎+服务Service+cookie+session的主要内容,如果未能解决你的问题,请参考以下文章

SpringBoot静态资源访问+拦截器+Thymeleaf模板引擎实现简单登陆

静态资源和模板引擎

nest.js学习

Express与传统Web应用(服务端渲染art-template模板引擎配置静态资源托管)

springboot--- 七静态资源和模板引擎

如何在 Nest.js 中提供静态 HTML 文件?