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属性;

 

posted @ 2019-12-18 14:29  雅昕  阅读(560)  评论(0编辑  收藏  举报