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上传文件
可以看看秋风的笔记里面的文件上传和下载