Node之存储

localStorage(本地存储)
  • 特点
    • 1.是H5提供的不兼容低版本浏览器
    • 2.存储内容大小为5MB
    • 3.不受安全卫士,浏览器等清除的影响
    • 4.永久存储到本地,不手动删除会一直存在,关掉浏览器也会存在
    • 5.严格的本地存储,与服务器无关
    • 6.存储获取的结果是字符串
  • localStorage的使用

    • 设置

        localStorage.setItem([key],[value])
    • 获取

        localStorage.getItem([key])
    • 移除

        localStorage.removeItem([key])
    • 通过索引获取指定位置存储信息对应的key

        localStorage.key([key])
    • 清空本源下的所有存储信息

        localStorage.clear()
sessionStorage(临时存储)
  • 与localStorage用法一致的会话存储,页面刷新会话还可以保存,一旦页面关闭,信息就清空了
cookie(本地存储)
  • 特点
    • 1.兼容所有浏览器
    • 2.存放的内容少,4kb,浏览器会限制一个站点最多可以存放20个cookie
    • 3.不安全,重要信息最好不要存放在cookie上(md5加密)
    • 4.cookie容易被安全卫士等软件清除
    • 5.有过期时间
    • 6.不是严格的本地存储,获取cookie时,保证服务器和客户端保持连接,读取cookie也要经过HTTP处理
  • cookie的应用
   let http=require('http');
   let url=require('url');
   let querystring=require('querystring')
   http.createServer(function(req,res){
       let {pathname}=url.parse(req.url,true);
       res.setHeader('Content-type','text/html;charset=utf-8')
       //当客户端访问的路径是/write的话就表示写cookie
      if (pathname=='/visit'){
            let cookie=req.headers.cookie;
            let visit=1;
            if (cookie){
                 //cookie并不是真正的查询字符串,所以不同字段的风格符是; ,而不是&,所以在解析的时候要注意传入字段分隔符
                 let cookieObj=querystring.parse(cookie,'; ')
                if(cookieObj.visit){
                     // + 字符串转数字的意思
                     visit=(isNaN(+cookieObj.visit)?0:parseInt(+cookieObj.visit))+1
                 }
              }
             res.setHeader('Set-Cookie',`visit=${visit}`)
             res.end(`顾客欢迎你第${visit}次来`)
    }else{
             res.end('404')
    }
}).listen(8081);


  • queryString扩展

原理:利用&把字段分开,再用等号把键和值分开
参数:参数1-》要分隔的内容 参数2:以什么进行分割
有两个方法:querystring.parse() querysting.stringfy()

 let str='id=1&age=3';
 let querystring=require('querystring')
 let obj=querystring.parse(str,'&’)//&是默认的分隔符
  • md5加密

    • 特点
      • (1)任意长度的输入,会产生出相同长度的输出
      • (2)不同的输入一定要输出不同的输出
      • (3)不能从输出内容反推输入的值
    • 加密方式
      • 依赖于内置模块 crypto
      createHash 指定算法 update要加密的字符串  digest以16进制的格式输出摘要的结果
        let crypto=require('crypto')
        let str='hello'
        let res=crypto.createHash('md5').update(str).digest('hex')
        //每次加密之后更新的值都不一样,因此在使用过程中,要每次都获取新的值
session(服务器存储)
  • 存放在服务器上
  • session的操作
    • 写 req.session.username=’wang’
    • 读 req.session.error
    • 删除 delete req.session error
  • 使用session的参数

        app.use(session({
            resave:true,//每次客户端来请求的时候,都要重新保存筛选
             saveUninitialized:true,//保存未使用过的session
             secret:'wang' //密匙,用来加密session
        }))
  • 完整demo

    权限管理系统 注册get/post,登录get/post,欢迎页面get /reg
    1.先通过get访问注册页面,返回空白的注册表单 /user
    2.填写此注册表单,如果注册成功跳到登录页,如果注册失败返回注册表单 /login
    3.填写登录表单,发送post登录请求,如果登录成功,跳到用户主页,如果登录失败,调回录页

    
        let express = require('express');
        let path = require('path');
        let bodyParser = require('body-parser');
        let session = require('express-session');
        let crypto = require('crypto');
        let app = express();
        app.use(session({
          resave:true,
          saveUninitialized:true,
          secret:'zfpx'
        }));
        //此中间件是专门用来处理请求体的,会把查询字符串格式的请求体转成一个对象并赋给req.body
        //把查询字符串变成对象 querystring.parse() qs.parse();
        app.use(bodyParser.urlencoded({extended:false}));
        //设置模板引擎
        app.set('view engine','html');
        //设置模板存放的根目录
        app.set('views',path.resolve('views'));
        //如果模板是html的话,用ejs来进行渲染
        app.engine('html',require('ejs').__express);
        let users = [];
        app.listen(8080);
        //当客户端通过GET方式访问/reg的时候,服务器返回一个空白的注册表单
        app.get('/reg',function(req,res){
          //把cookie中的error属性取出
          let error = req.session.error||'';
          //清除cookie中的error
          //res.clearCookie('error');
          delete req.session.error;
          res.render('reg',{title:'用户注册',error});
        });
        app.post('/reg',function(req,res){
           let user = req.body;
           //找一下用户数组中有没有跟当前传过来的用户用户名相同的用户
           let oldUser = users.find(item=>item.username == user.username);
           if(oldUser){//如果找到了同名用户,则重定向到注册页
             //back是一个关键字,表示上一个页面,从哪来回滚哪里去
             //向客户端写入cookie
             //res.cookie('error','此用户名已经被占用,请换一个试试');
             req.session.error = '此用户名已经被占用,请换一个试试';
             res.redirect('back');//让客户端重新向另外一个路径发起请求
           }else{//如果没有找到同名的用户,则重定向到登录页
             //先对密码进行md5加密后才保存
             user.password = crypto.createHash('md5').update(user.password).digest('hex');
             users.push(user);
             res.redirect('/login');
           }
        });
        //当客户端通过GET方式访问/login的时候,返回登录表单
        app.get('/login',function(req,res){
          let error = req.session.error||'';
          delete req.session.error;
          res.render('login',{title:'用户登录',error});
        });
        //当客户端提交登录表单之后
        app.post('/login',function(req,res){
         let user = req.body;//{username,password}
          //查找一下看看用户数组中有没有符合条件的用户
         let oldUser = users.find(item=>item.username==user.username && item.password == crypto.createHash('md5').update(user.password).digest('hex'));
         if(oldUser){//如果找到了说了登录是成功的
           req.session.success = '登录成功';
           req.session.username = oldUser.username;
           res.redirect('/user');
         }else{//如果没有找到,说明登录是失败的
           req.session.error = '用户名或密码输入错误';
           res.redirect('back');
         }
        });
        //用户主页
        app.get('/user',function(req,res){
         let success = req.session.success||'';
         let error = req.session.error||'';
         let username = req.session.username||'';
         delete req.session.success;
         delete req.session.error;
         res.render('user',{title:'用户主页',success,error,username});
        });
        建一个views文件夹,里边有login.html,reg.html,user.html文件,文件中要设置<title><%=title%></title> <p style="color:red"><%=error%></p>等,凡是通过此js文件展示在对应html页面的内容,都应该在html中加入模板
  • 服务器存储的技术方案
    • 1.session
    • 2.文件存储
    • 3.数据库存储
      • mongodb(NODE) 轻量级
      • Access微软办公自带
      • My SQL更轻量级
      • SQL SERVER 容量较大的存储
      • ORACLE 容量更大的存储
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值