express中常用的库和使用方法

936 阅读3分钟

express笔记

安装express和express脚手架之后

express --view=ejs yourname -- 在当前创建文件夹新建项目

express --view=ejs ./ 在当前目录新建醒目

express.urlencoded({extends:false})是一个中间件函数,通过app.use来添加中间件,express.urlencoded返回一个函数

req.params可以接收动态路由参数 类似 /:id 请求/1 可以从req.params.id得到1,可以用.或者-分割

类似 /:id.name /:id-name 请求/1.zhangsan 可以从req.params.id 和req.params.name得到值

req.query可以得到form get请求过来的参数,形式是/abc?a=1&b=2,通过req.query.a 或者req.query.b可以得到a或者b的值

express //设置允许跨域

res.append('Access-Control-Allow-Origin','*') 设置允许域名

res.append('Access-Control-Allow-Content-Type') 设置允许请求方法

var logger = require('morgan')

app.use(logger('dev'))是开发环境的输出

将log输出到文件

app.use(express.json())接收post请求的json数据,请求包括urlencoded和json数据

cookie

app.use(cookieParse())是cookie的处理中间件

cookie可以作为状态保存,用于登录保存

res.cookie("name","value") 设置cookie,有效期到浏览器关闭为止

res.cookie("name","value",{maxAge:''}) 设置cookie,并设置有效期

设置httpOnly的话只有浏览器能够看到,前端js代码不能操作

具体可以参考老陈笔记

app.use(cookieParser());加上'secret' ,app.use(cookieParser('secret'))可以实现cookie加密

res.cookie("name","value",{signed:true})

crypto可以用作加密,加密cookie 或者密码

使用库函数加密解密

const crypto = require('crypto')
router.get('/addsecret',(req, res, next)=>{
  let password = '123456'
  let suanfa =  crypto.createHash('md5') //算法
  suanfa.update(password) //加密后是二进制数据
  let content = suanfa.digest('hex')
  res.send(content) //送到页面展示一下
  return content
})

加密后只能在 req.signedCookies里得到加密的cookie

自定义加密解密

function jiami(str){ //之所以这样写名字是为了以后好理解
  let suanfa =  crypto.createHash('md5') //算法
  suanfa.update(str) //加密后是二进制数据
  let content = suanfa.digest('hex')
  return content
}
let cookieSecret ={}
function setSecretCookie(str,SecretStr){
  cookieSecret[SecretStr]=str
}
function getSecretCookie(SecretStr){
  return cookieSecret[SecretStr]
}

//上面是模块加密,下面试试自定义加密
router.get('/diysecret',(req, res, next)=>{
  let sstr = jiami('true')
  res.cookie('register',sstr)
  // 存一下加密的值
  setSecretCookie('true',sstr)
  res.send('自定义加密成功')
})
router.get('/getdiy',(req, res)=>{
  let sstr = req.cookies.register //sstr ---->secret str
  let str = getSecretCookie(sstr)
  res.send(str)
})

session

session是cookie的升级版本,它就是加密的cookie

使用方法

1 .express脚手架默认没有,要手动安装

npm install express-session --save

2.引入

const session = require('express-session')

app.use(session({

​ 'secret':'zidingyijiami', //加盐,不加也行

​ resave:true, 保存到磁盘上面

​ saveUninitialized:true, //保存初始化

​ cookie:{ //设置cookie的配置,过期时间什么的,空就是默认值

​ maxAge:1000*60**5

​ }

}))

3.使用

router.get('/session',(req,res,next)=>{

req.session.isLogin = 'true'

req.session.username = 'xiaoming'

req.session.vipLevel = 5;

res.send('登录状态已经设置到session中')

})

req.session.coookie.maxAge 重置过期时间

req.session.destory销毁session,可以用来退出登录

表单和ajax上传文件

表单上传文件

var express = require('express');
var router = express.Router();
const multer = require('multer')
const upload = multer({dest:'./public/upload',limits:{fileSize:1024*1024*5,files:5}})
// 限制大小5M,限制数量5个
const fs = require('fs')
const path = require('path')
/* GET users listing. */
router.get('/', function(req, res, next) {
  res.render('upload.ejs');
});
router.post('/', upload.single('imgfile'),function(req, res, next) {
  //表单上传
  //single传入前端表单文件 input name值
  console.log(req.file)
  let oldname = req.file.path
  let newname = req.file.path+path.extname(req.file.originalname)
  fs.rename(oldname,newname,(err)=>{
    if(err){
      console.log(err);
    }
  })
  res.send(`<h1>上传成功</h1><img src="${newname.replace('public','static')}"/>`)
});
module.exports = router;

ajax上传文件

可以看看秋风的笔记里面的文件上传和下载