zoukankan      html  css  js  c++  java
  • node+express 配置安装以及数据解析,cookie,session

    一、express安装,创建服务

    (1)安装:npm install express --save
    (2)创建服务 server.js:

    const express = require('express')
    
    const server = express()
    server.use('/a.html', function(req, res) { res.send('abc') res.end() }) server.use('/b.html', function(req, res) {   res.send({ok: false, msg: '失败'})    res.end() }) server.get('/',(req, res)=> { console.log('有get') })
    server.post('/',(req, res)=> {
      console.log('有post')
    })
    server.listen(8000)

     express请求包含post,get, use 等,而use既可以接收post请求,也可以接收get请求:

    1  <form action="http://localhost:8000" method='get'>
    2     用户:<input type="text"> <input type="submit" value='提交'>
    3   </form>

    当点击提交时,打开终端执行 node server.js:

    执行日志:

    同样将form表单中的method改为post请求,执行结果:

     而当server.js中,的use请求方式,无论form表单的请求为get还是post, server.js中的use都会执行;

    二、数据解析

    上面介绍到数据可以通过get或者post请求传递参数,那后台如何获取数据呢?

    get方式获取数据:

    1 const express = require('express')
    2 const server = express()
    3 server.get('/login', (req, res) => {
    4   console.log(req.query)  //可以通过req.query直接获取参数
    5 })
    6 
    7 server.listen(8000)

    post方式获取数据:需要通过 bodyParser中间件去获取

     1 const express = require('express')
     2 const server = express()
     3 const bodyParser = require('bodyParser') //中间件
     4 server.use(bodyParser.urlencoded({
     5   extended: true, //扩展模式
     6   limit:  2*1024*1024 //限制  默认100k
     7   }))
     8 server.use('/', (req, res) => {
     9   console.log(req.query) //get
    10   console.log(req.body) //post请求获取数据
    11 })
    12 server.listen(8000)

    三、next链式调用

     1 const express = require('express')
     2 const server = express()
     3 server.listen(8000)
     4 server.use(function(req, res, next) {
     5   req.a = 12
     6   next()  //加上next() 之后,下面的use还会继续执行
     7 })
     8 server.use('/', function(req, res) {
     9   console.log(req.a)
    10 })

    四、cookie、session

    cookie :在浏览器保存一些数据,每次请求都会带过来
    缺点:不安全,大小有限(4k);可以再 浏览器通过 document.cookie = [key= value]; //修改后,可查看到最新的cookie值
    session:保存数据,保存在服务端 相对于cookie安全; session是基于cookie实现的
    cookie中会有一个session的id,服务器利用sessionid找到session文件,读取,写入;
    缺点:session劫持,别的用户在你当前电脑上查看sessionid ,然后通过自己的电脑利用你的sessionid身份去操作。
    1. cookie的使用
     1  const express = require('express')
     2  var server = express()
     3  const cookieParser = require('cookie-parser')  //获取cookie
     4   server.use(cookieParser())
     5  server.use('/aaa/a.html', (req, res) => {
     6   //发送cookie
     7   res.cookie('user', 'blue', {path: '/aaa', maxAge: 30*24*3600*1000})  //path指访问路径,maxAge 有效期
     8  
     9   //删除cookie
    10   res.clearCookie('user') //
    11    res.send('ok2')
    12   })

    为解决cookie的安全问题,我们可使用签名的方法,对cookie进行身份验证;

    使用签名后,会导致最终数据变大,考虑到cookie的大小限制,尽量避免对所有的cookie进行签名;

     1 const express = require('express')
     2  var server = express()
     3  const cookieParser = require('cookie-parser')  //获取cookie
     4  const cookieEncrypter = require('./cook') //加密
     5  //cookie
     6  server.use(cookieParser('sdsdsdl'))
     7  //加密: server.use(cookieEncrypter('sfdfdff'))
     8  server.use('/aaa/a.html', (req, res) => {
     9   //发送cookie
    10   // res.cookie('user', 'blue', {path: '/aaa', maxAge: 30*24*3600*1000})  //path指访问路径,maxAge 有效期
    11   // console.log(req.cookies)  //读取 cookie
    12   req.secret = 'sdsdsdl'  //加密  实际当中应该存在后台 如果server.use(cookieParser('sdsdsdl'))里面加了签名字符串,
                        这一行可省略,因为cookieParser会自动为其添加这个属性
    13 res.cookie('user', 'blue', {signed: true}) //签名还是能看到原数据,但是可以防止修改 14 15 //通过 decodeURIComponent('s%3Ablue.MRdJDwCo2b6xWz8LU%2FjukagSIY%2BMC85saYdGHb1%2Bp0U') === s:blue.xxxxx s代表是签名过的 16 17 //当签名后,再获取,获取的是签名后的数据,如果需要获取原来未签名的数据,需要:在server.use(cookieParser('这里是密钥内容')) 添加密钥内容 18 // console.log(req.cookies) //此时获取的数据是 未加密钥的原始数据 19 console.log('签名cookie', req.signedCookies) 20 console.log('无签名cookie', req.cookies) 21 22 //删除cookie 23 res.clearCookie('user') // 24 25 26 res.send('ok2') 27 }) 28 server.listen(8000)

    2. session的使用

     1 const express = require('express')
     2 const server = express()
     3 const cookieParser = require('cookie-parser')
     4 const cookieSession = require('cookie-session')
     5 server.use(cookieParser())
     6 server.use(cookieSession({   //当再当前页面不操作的时候,session会被清除,以免session被劫持
     7   name: 'sess',
     8   keys: ['aaa', 'bbb', 'ccc'], //数组越长,越安全
     9   maxAge: 2*3600*1000,  //2小时
    10 }))
    11 server.use('/', (req, res) => {
    12   // console.log(req.session)
    13   if (req.session['count']==null) {
    14     req.session['count'] = 1
    15   } else {
    16     req.session['count']++;
    17   }
    18   console.log(req.session['count'])
    19   // delete req.session//删除
    20   res.send('session')
    21 })
    22 
    23 server.listen(8000)

    对比可见,cookie数据是在浏览器的,而session数据是在服务端的,所以可以直接使用delete去删除当前session属性;

  • 相关阅读:
    内核中的内存都不分页
    SQL Server 变更数据捕获(CDC)
    FPGA视频拼接器的放大和缩小功能
    Button的Click事件与js函数的两种不同顺序触发方式
    STM32系列ARM单片机介绍
    开源ETL工具kettle--数据迁移
    hdu 2846 Repository
    LeetCode 231:Power of Two
    hdu 4628 Pieces(状态压缩+记忆化搜索)
    MongoDB 数据库下载和安装
  • 原文地址:https://www.cnblogs.com/loveyaxin/p/12058276.html
Copyright © 2011-2022 走看看