zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    HttpServletRequest对象(一)
    HttpServletResponse对象(二)
    HttpServletResponse对象(一)
    Servlet路径跳转问题
    sevlet的url-pattern设置
    java中使用相对路径读取文件的写法总结 ,以及getResourceAsStream() (转)
    创建第一个servlet程序--HelloServlet
    Eclipse创建一个JAVA WEB项目
    Servlet学习(二):ServletConfig获取参数;ServletContext应用:请求转发,参数获取,资源读取;类装载器读取文件
    Centos7默认安装的docker版本说明
  • 原文地址:https://www.cnblogs.com/Tanqurey/p/10776542.html
Copyright © 2011-2022 走看看