node(koa2) web应用模块介绍详解


Posted in Javascript onMarch 29, 2019

在自己的koa2 web项目中,用到了几个模块,感觉都是不错的,特地来分享下这些模块。

一、前言

我们都知道可以通过koa2 工程名的方式来初始化koa2项目,官方为我们增加了koa-bodyparser、koa-josn、koa-router等非常不错的模块,但是,仍不够,所以我将搜集到的有用的包介绍下,当然,有好的包仍然会添加到其中。整个项目在koa2-web-engine ,为了方便查看,使用了原生的方式,欢迎查看。

二、新的模块

将代码克隆到本地并安装依赖后,启动服务器,在3000端口可以看到所有demo。

验证码

svg-captcha是一个验证码的库,他创建了svg格式的验证码,可以在登录时,验证是否是正常的用户登录。

使用十分的简单:

const svgCaptcha = require('svg-captcha');
captcha = svgCaptcha.create();

captcha对象中包含了svg数据和svg上显示的内容,至于是否要大小写强制验证就可以通过配置的方式来增加了。

处理代码位于routes/verificationCode.js中。

密码加密登录

后端主要是利用node-rsa生成公钥和私钥,再将公钥发送给前端,前端利用jsencrypt进行加密后发送给node,node再用私钥解密。

为了性能,我只在服务器启动的时候生成公钥和私钥,以后的请求都是用这队公私钥,他位于utils/RSA.js文件中,解密在routes/login.js中。

更详细的可以查看我的这篇博客:基于node简单实现RSA加解密。

参数类型检测

为了服务器的安全性,服务器对前端发送来的数据肯定是要做校验的,我这使用的joi库。

校验主要靠Joi.validate()方法,第一个参数是要校验的对象数据,第二个参数是数据内每个键对应的数据类型,第三个则是可选的option,返回值是一个对象,该对象下的error字段用于判断此次校验是否成功。

在utils/checkParams.js中,paramsFormat定义了检测类型,当然每个类型都得用joi内置的类型,checkParams()函数就是做检测的地方,将最后的检测结果return出去。

回到routes/joi.js中,利用checkParams()方法检测数据类型,这儿的检测是针对单个的请求,如果要针对所有的请求,可以写成中间件的形式,如utils/middleware.js中,并在app.js中加入以下的就行了:

const middleware = require('./utils/middleware');
middleware.use(app);

防xss

这儿用到的是xss模块,将每次请求到的数据经过xss处理,输出到后端。为此我自己搞了koa2-xss中间件模块,顺带学习了如何发布npm包,感兴趣的可以看下。

日志记录

我是用的是log4js模块,该模块既可以记录到数据库,也可以记录到log文件中,此处我是写到文件中的。

utils/logs.js文件中是log4js的配置,并封装了对外的调用接口,routes/log4js.js中是根据用户发送的请求记录到日志文件中。

定时任务

利用了node-schedule模块,一个系统总会用到定时任务的,node-schedule提供了较为简单的api,使用比较方便。

路由合并

koa2初始化的项目中是将每个路由文件require到app.js中的,当路由文件变多时,管理这些路由就是件麻烦的事,于是引入了koa-compose来管理这些路由文件,只对外暴露一个接口。详细的可以查看routes/index.js文件。

webSocket

websocket在实时性要求比较高的场景下也是会用到的,我们可以利用ws模块实现。更为详细的可以查看我的这篇文章:基于node实现websocket通信。

三、总结

后期用到一些有意思,有用的模块也将加入到koa2-web-engine 中。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
bgsound 背景音乐 的一些常用方法及特殊用法小结
May 11 Javascript
基于jQuery试卷自动排版系统
Jul 18 Javascript
jQuery:节点(插入,复制,替换,删除)操作
Mar 04 Javascript
Jquery.addClass始终无效原因分析
Sep 08 Javascript
js使用栈来实现10进制转8进制与取除数及余数
Jun 11 Javascript
Vue.js在使用中的一些注意知识点
Apr 29 Javascript
mac上node.js环境的安装测试
Jul 03 Javascript
easyui datagrid 表格中操作栏 按钮图标不显示的解决方法
Jul 27 Javascript
Vue Transition实现类原生组件跳转过渡动画的示例
Aug 19 Javascript
javascript实现获取一个日期段内每天不同的价格(计算入住总价格)
Feb 05 Javascript
Vue.js 2.x之组件的定义和注册图文详解
Jun 19 Javascript
vue 搭建后台系统模块化开发详解
May 01 Javascript
Vue js 的生命周期(看了就懂)(推荐)
Mar 29 #Javascript
浅谈js闭包理解
Mar 28 #Javascript
微信小程序中转义字符的处理方法
Mar 28 #Javascript
微信小程序中使用Async-await方法异步请求变为同步请求方法
Mar 28 #Javascript
详解Js里的for…in和for…of的用法
Mar 28 #Javascript
ES7之Async/await的使用详解
Mar 28 #Javascript
详解vue-cli3多环境打包配置
Mar 28 #Javascript
You might like
PHP中文件读、写、删的操作(PHP中对文件和目录操作)
2012/03/06 PHP
phpstrom使用xdebug配置方法
2013/12/17 PHP
PHP+Ajax简单get验证操作示例
2019/03/02 PHP
JavaScript 面向对象之命名空间
2010/05/04 Javascript
js切换div css注意的细节
2012/12/10 Javascript
用jquery的方法制作一个简单的导航栏
2014/06/23 Javascript
浅谈轻量级js模板引擎simplite
2015/02/13 Javascript
三种AngularJS中获取数据源的方式
2016/02/02 Javascript
vue-router重定向不刷新问题的解决
2018/06/25 Javascript
jquery 动态遍历select 赋值的实例
2018/09/12 jQuery
一篇文章,教你学会Vue CLI 插件开发
2019/04/17 Javascript
微信小程序中如何计算距离某个节日还有多少天
2019/07/15 Javascript
浅谈微信小程序列表埋点曝光指南
2019/10/15 Javascript
node.js 微信开发之定时获取access_token
2020/02/07 Javascript
JS数组扁平化、去重、排序操作实例详解
2020/02/24 Javascript
[41:17]完美世界DOTA2联赛PWL S3 access vs CPG 第二场 12.13
2020/12/17 DOTA
详解python3百度指数抓取实例
2016/12/12 Python
python队列通信:rabbitMQ的使用(实例讲解)
2017/12/22 Python
Python 3.6 读取并操作文件内容的实例
2018/04/23 Python
使用numpy和PIL进行简单的图像处理方法
2018/07/02 Python
Django实现发送邮件找回密码功能
2019/08/12 Python
Python list与NumPy array 区分详解
2019/11/06 Python
Python 识别12306图片验证码物品的实现示例
2020/01/20 Python
520使用Python实现“我爱你”表白
2020/05/20 Python
Python SMTP配置参数并发送邮件
2020/06/16 Python
工程造价专业大专生求职信
2013/10/06 职场文书
党员培训思想汇报
2014/01/07 职场文书
临床医师专业个人自我评价
2014/01/08 职场文书
世界水日宣传活动总结
2015/02/09 职场文书
2015年健康教育工作总结
2015/04/10 职场文书
建国大业观后感
2015/06/01 职场文书
薪资证明范本
2015/06/19 职场文书
七年级思品教学反思
2016/02/20 职场文书
离婚协议书格式范本
2016/03/18 职场文书
2016年社区“我们的节日·中秋节”活动总结
2016/04/05 职场文书
2016年第二十届“母亲节暨幸福工程救助贫困母亲活动日”活动总结
2016/04/06 职场文书