node03

1、express处理post请求

借助body-parse中间件,其实最终我们也不会使用这个

对于get请求,无需中间件,用req.query即可返回相应的数据

但是post我们尝试借助中间件处理

const express = require('express')
const es = require('express-static')
const bp = require("body-parser")

let server = express()

server.use(bp.urlencoded({
   extended: false,//是否启用扩展模式
   limit: 2 * 1024 * 1024//限制接收post数据的大小,100k默认

})) //中间处理,共有2个参数

server.use('/', function (req, res) {
   console.log(req.body)
})


server.listen(8080, () => console.log('server is running'))


<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<script src="./ajax.js"></script>

<body>
    <form action="http://localhost:8080" method="post">
        用户名:<input type="text" name="user" id="user"><br />
        密码:<input type="passsword" name="pwd" id="pwd">
        <input type="submit" value="登录" id="login">
    </form>

</body>
<script>
    window.onload = function () { }



</script>

</html>
const express = require('express')
const es = require('express-static')
const bp = require("body-parser")

let server = express()

server.use(bp.urlencoded({
   extended: false,//是否启用扩展模式
   limit: 2 * 1024 * 1024//限制接收post数据的大小,100k默认

})) //中间处理,共有2个参数

server.use('/', function (req, res, next) {//use的第一个参数缺省,将响应所有的路径

   console.log(req.body)
   req.a = 12
   //next适用来表明需要进行下一步的链式操作的,否则直接结束响应
   //进行链式操作的use的url务必一致,本函数体内数据在下一个相应的use内仍有效
   next()
})

server.use('/',function(){
   console.log(req.a)
})


server.listen(8080, () => console.log('server is running'))

2、尝试编写中间件

const express = require('express')
const es = require('express-static')
const bp = require("body-parser")
const qs = require("querystring")

let server = express()

//自己编写的处理post请求的中间件
server.use(function (req, res, next) {
   let str = ''
   req.on('data', function (data) {
      str += data
   })
   req.on('end', function () {
      req.body = qs.parse(str)
      next()
   })
})

server.use('/', function (req, res) {
   console.log(req.body)
   console.log('finished')
})

server.listen(8080, () => console.log('server is running'))

2)进行封装

const qs = require("querystring")

module.exports=function (req, res, next) {
    let str = ''
    req.on('data', function (data) {
       str += data
    })
    req.on('end', function () {
       req.body = qs.parse(str)
       next()
    })
 }

3)总结

const qs = require("querystring")

module.exports=function (req, res, next) {
    let str = ''
    req.on('data', function (data) {
       str += data
    })
    req.on('end', function () {
       req.body = qs.parse(str)
       next()
    })
 }

4、cookie/session

session存储在服务端,比较安全,seession是基于cookie存在的

const qs = require("querystring")

module.exports=function (req, res, next) {
    let str = ''
    req.on('data', function (data) {
       str += data
    })
    req.on('end', function () {
       req.body = qs.parse(str)
       next()
    })
 }

操作这两个存储需要使用到的中间件是cookie-parser cookie-session

简单地使用cookie

const express = require('express')

let server = express()

server.use('/', function (req, res) {
    res.cookie('user', 'cc', {
        path: '/',//哪个目录下可以读取这个cookie
        maxAge: 30 * 24 * 3600 * 1000//一个月有效时间
    })//共三个参数:键、值、设置其他cookie参数的对象

    res.send('ok啦')
})

server.listen(8080, function () {
    console.log('server is running')
})

使用签名的cookie

const express = require('express')
const cp = require('cookie-parser')

let server = express()

server.use(cp('esfwegethg'))//密钥,必须和下面的secret对应,可省略

//cookie是可以向上访问的
server.use('/', function (req, res) {
    req.secret='esfwegethg'
    //进行签名,可以防止用户端篡改
    res.cookie('user', 'blue', { signed: true })//s开头,进行了签名

    console.log(req.cookies)//这里打印的是没有进行签名的cookie
    console.log(req.signedCookies)//这里打印的是进行签名的cookie
    res.send('ok啦')
})

server.listen(8080, function () {
    console.log('server is running')
})

 

res.clearCookie('键’)//删除cookie

使用cookie-encrypter中间件能更好地为cookie进行加密解密

但cookie一般不加密,session是强制我们进行加密的

2)使用session

const express = require('express')
const cp = require('cookie-parser')
const cs = require('cookie-session')

let server = express()

server.use(cp())
server.use(cs({
  name:"cc"//自定义sesion id 键名 //必须,强制加密以保证session数据安全 keys: ['aaa', 'bbb', 'ccc'],
   maxAge:24*3600*1000//设置session有效期 })) //cookie是可以向上访问的 server.use('/', function (req, res) { if (!req.session["count"]) { //记录访问次数 req.session["count"] = 1 } else { req.session["count"]++ } console.log(req.session['count']) res.send('ok啦') }) server.listen(8080, function () { console.log('server is running') })

使用后cookie中会存有两个cookie,一个session,即session id,一个session.sig,是一个签名,

删除session:

delete req.session

原文地址:https://www.cnblogs.com/Tanqurey/p/10776542.html