zhuangzi 2020-04-21
随着后端业务系统的增加,需求纵向不断扩展,一个业务系统已经无法满足需求了,这时就需要一个统一请求的过滤层,这就是中间件,中间件常见的用途有:IP过滤、防爬虫、解析请求、合并接口、合并端口、cookie处理、参数校验、权限校验、异常处理、负载均衡、反向代理等,业务系统就可以关注点集中在业务层,隔离这些基础设施,让开发者专注于业务以提高开发效率。
中间件技术选型要求:
高并发、传输快、非阻塞(NIO)
常见的???nodejs、netty、go,这里介绍下nodejs
网上很多使用nodejs作中间层采用的是express,这里介绍的是koa2,Express是第一代最流行的web框架,它对Node.js的http进行了封装,而koa是Express的下一代基于Node.js的web框架,目前有1.x和2.0两个版,这里使用的是2.0.
koa结合koa2-proxy-middleware实现反向代理功能,koa2-proxy-middleware可以根据业务自定义转发的URL,同时可以配置请求、响应的事件监听,用于打印请求参数、修改请求头、修改响应等:
router:function(req){
let url = req.url
return "127.0.0.1:80"
}
这里修改转发的服务地址.
pathRewrite:function(req){
let url = req.url
return "/api/user/login"
}
这里修改转发业务url
onProxyReq:function(proxyReq, req, res){
proxyReq.setHeader(‘Conche-Control‘, ‘no-cache‘);
}
这里修改请求头、打印请求参数等
onProxyRes:function(proxyRes, req. res){
}
这里可以获取响应,并修改响应。
记录日志可以使用大家都熟悉的log4js,可以按天记录日志,方便查找,如果需要大型日志系统也可以接入ELK
部署的话可以直接源码运行(如:node index.js),也可以使用pkg、JXCore、webpack打包出来,推荐使用webpack打包成一个js文件(如index.js)后,使用pm2运行(如:pm2 start index.js),node index.js方式运行的话如果运行过程中报错了可能整个服务都停止了,pm2就不会,pm2会自动重启,pm2主要特性: