用express改写博客项目
首先回顾下我们的整个流程
请求进来,记录日志,解析cookie,解析session,解析postdata,if+else找到路由,登录校验,获取数据,数据返回
使用express 和 express - generator脚手架。它可以为我们做很多事情,比原生的node更简洁
从入口文件app.js即可初步看出帮我们实现的地方
var createError = require('http-errors'); //帮我们处理出错时候的返回
var cookieParser = require('cookie-parser'); //处理cookie解析
app.use(cookieParser()); //处理cookie解析
var logger = require('morgan'); //处理日志
app.use(express.json()); //处理postData
app.use(express.urlencoded({ extended: false })); //处理postData,使用时候直接req.body即可
app.use('/api/blog', blogsRouter) //处理路由
//这里虽然没有引入,但是query(get请求的参数)也处理了,我们使用时,直接req.query即可
// 路由写起来更方便了
// demo
router.get('/detail', function (req, res, next) {
const id = req.query.id
return getDetail(id).then(detailData => {
res.json(
new SuccessModel(detailData)
)
return
})
})
// 这样的路由看起来更简洁,
// 不再是if判断的方式来看待路由
// 返回直接使用res.json()
express中使用session
一,express中用session
二,express中用redis存session
一:
1, 安装express-session
2, app.js中 引用express-session
3, app.js中 配置并执行express-session
npm install express-session
const session = require('express-session')
app.use(session({
secret: 'WJiol_#23123_', //设置个加密
name: 'userId', //给浏览器中的cookie起个名字
cookie: {
path: '/',
httpOnly: true,
maxAge: 24 * 60 * 60 * 1000
},
}))
这之后就可以在有req的地方直接调用req.session了
二:(在上面的基础上)
1, 安装 redis connect-redis
2, app.js中 引用connect-redis并传参session
3, 造一个redis链接实例,赋值给redisClient
4, 造一个connect-redis实例
5, 这个实例作为session的仓库(到此结束,当有session变动的时候,会存入redis)
npm install redis connect - redis
const RedisStore = require('connect-redis')(session)
const redisClient = require('./src/db/redis') //造一个redis链接实例,赋值给redisClient
const sessionStore = new RedisStore({ client: redisClient })
app.use(session({
secret: 'WJiol_#23123_',
name:'userId',
cookie: {
path: '/',
httpOnly: true,
maxAge: 24 * 60 * 60 * 1000
},
store:sessionStore
}))
//我们看下服务端的整套流程用express的优势
整体看来,从请求进来到出去
其中日志部分优化了,
query处理替我们做了,
postData处理替我们做了,
cookie处理替我们做了,
404处理替我们做了
路由部分优化了,
session+redis优化了,
获取数据部分(mysql)要我们自己做,用node原版的就好。
res返回优化了。