nest学习6:使用cookie和session

文章问题导向

如何使用cookie?
如何使用session?
它们参数对应的意思是什么?

如果你都有了答案,可以忽略本文章,或去nest学习导图寻找更多答案


使用前注意

cookie和session的使用依赖于当前使用的平台,如:express和fastify
两种的使用方式不同,这里主要记录基于express平台的用法

使用cookie
第一步:安装

yarn add cookie-parser @nestjs/platform-express

第二步:引入-注册

main.ts

import {
      AppModule } from './app.module';
import {
      NestExpressApplication } from '@nestjs/platform-express';
import * as cookieParser from 'cookie-parser'

async function bootstrap() {
     
  const app = await NestFactory.create<NestExpressApplication>(AppModule);
  
  //注册cookie
  app.use(cookieParser('dmyxs'));  //加密密码
  
  await app.listen(3000);
}
bootstrap();

第三步:接口中设置cookie~使用response
请求该接口,响应一个cookie

@Get()
index(@Response() res){
     
    //设置cookie, signed:true加密
    //参数:1:key, 2:value, 3:配置
    res.cookie('username', 'tao', {
     maxAge: 1000 * 60 * 10, httpOnly: true, signed:true})
    
    //注意:
    //使用res后,返回数据必须使用res
    //如果是用了render模板渲染,还是使用return
    res.send({
     xxx})
}

cookie相关配置参数

domain	  String	指定域名下有效
expires	  Date	    过期时间(),设置在某个时间点后会在该cookoe后失效
httpOnly  Boolean	默认为false表示不允许客户端(通过js来获取cookie)
maxAge	  String	最大失效时间(毫秒),设置在多少时间后失效
path	  String	表示cookie影响到的路径,:path=/如果路径不能匹配的时候,浏览器则不发送这个cookie
secure	  Boolean	当 secure 值为 true,cookie 在 HTTP 中是无效,HTTPS 中才有效
signed	  Boolean	表示是否签名cookie,如果设置为true的时候表示对这个cookie签名了,这样就需要用res.signedCookies()获取值cookie不是使用res.cookies()

第四步:获取cookie

@Get()
index(@Request() req){
     
      console.log(req.cookies.username)
      
      //加密的cookie获取方式
      console.log(req.signedCookies.username)  
      return req.cookies.username
}

使用session

第一步:安装

yarn add express-session @nestjs/platform-express

第二步:引入-注册

main.ts

import {
      AppModule } from './app.module';
import {
      NestExpressApplication } from '@nestjs/platform-express';
import * as session from 'express-seesion'

async function bootstrap() {
     
  const app = await NestFactory.create<NestExpressApplication>(AppModule);
  
  //配置session
  app.use(session({
     
      secret: 'dmyxs',
      cookie: {
      maxAge: 10000, httpOnly: true },  //以cookie存储到客户端
      rolling: true //每次重新请求时,重新设置cookie
  }))
  
  await app.listen(3000);
}
bootstrap();

session相关配置参数

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

第三步:接口中设置session

@Get()
  @Render('default/user')
  index(@Request() req){
     
    //设置session
    req.session.username = 'tao'
}

第四步:获取session

@Get('/session')
  session(@Request() req, @Session() session ){
     
    //获取session:两种方式
    console.log(req.session.username)
    console.log(session.username)
    
    return 'hello session'
}

学习更多

nest学习导图

你可能感兴趣的:(nest,node.js)