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: '/',//哪個目錄下可以讀取這個cookiemaxAge: 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)//這里打印的是沒有進行簽名的cookieconsole.log(req.signedCookies)//這里打印的是進行簽名的cookieres.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
總結
- 上一篇: 第九周作业及总结
- 下一篇: WPF中引入外部资源