node_egg_验证码注册
Posted junlan
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了node_egg_验证码注册相关的知识,希望对你有一定的参考价值。
目录结构
|__app
| |__controller
| | |__register.js
| | |__verifyCode.js
| |__service
| | |__registerTools.js
| | |__verifyTools.js
| |__public
| | |__test.txt/test.png/test.mp4 //存放的上传文件
| |__router.js
|__config
|__config.default.js
|__plugin.js
app/router.js
‘use strict‘; /** * @param {Egg.Application} app - egg application */ module.exports = app => { const { router, controller } = app; // 注册路由 router.post(‘/register‘, controller.register.register); // 验证码路由 router.get(‘/verifyCode‘, controller.verifyCode.verify); };
app/controller/register.js
‘use strict‘; const Controller = require(‘egg‘).Controller; // controller 层, 对请求参数进行处理(校验。拼接),然后调用相对应的service方法 class RegisterController extends Controller { // 注册模块 async register() { const { ctx } = this; // 调用service文件下的registerTools.js的writeToDB方法 const result = await ctx.service.registerTools.writeToDB(); // 将数据返回给前端 ctx.body = result; } } module.exports = RegisterController;
app/controller/verifyCode.js
‘use strict‘; const Controller = require(‘egg‘).Controller; class VerifyCodeController extends Controller { // 验证模块, 分离模块,各有各的功能, async verify() { const { ctx } = this; // 调用验证模块的captcha方法 const captcha = await ctx.service.verifyTools.captcha(); // 返回的类型 ctx.response.type = ‘image/svg+xml‘; // 将数据返回前端 ctx.body = captcha.data; } } module.exports = VerifyCodeController;
app/service/registerTools.js
‘use strict‘; const Service = require(‘egg‘).Service; const fs = require(‘fs‘); // service 层,复杂数据的处理,数据库的存取 class RegisterToolsService extends Service { async writeToDB() { const { ctx } = this; // 接收表单默认post请求的参数 const data = ctx.request.body; // 使用前需要开启文件模式config.default.js配置 // 上传的文件需通过ctx.request.files获取,返回的是一个数据,保存的上传文件的信息 const files = ctx.request.files[0]; // 将上传的缓存文件保存到本地服务器,fs.rename(oldPath, newPath, callback) newpath注意拼接文件的目录和名字 // files.filepath: 保存的是上传文件的缓存地址, fs.rename(files.filepath, `${__dirname}/../public/upload/${files.filename}`, () => {}); // 将文件的相对地址进行拼接 data[files.field] = ‘/upload/‘ + files.filename; // 判断输入的验证是否正确,正确就保存到数据库中,否则就返回相关错误信息 data.verifyCode = data.verifyCode.toLowerCase(); // 框架内置了 Session 插件,给我们提供了 ctx.session 来访问或者修改当前用户 Session 。 // verifyTools.js封装了验证码模块,将验证码text保存到全局ctx.session.code上,可以直接获取,经典的发布者订阅模式/观察者模式 const result = ctx.session.code.toLowerCase() === data.verifyCode ? await this.app.mysql.insert(‘register‘, data) : { message: ‘verifyCode Error‘ }; return result; } } module.exports = RegisterToolsService;
app/service/verifyTools.js
‘use strict‘; const Service = require(‘egg‘).Service; // npm install svg-captcha --save 下载第三方插件并引入 const svgCaptcha = require(‘svg-captcha‘); // 验证码配置信息 const options = { size: 10, fontSize: 100, width: 500, height: 200, background: ‘#cc9966‘, }; // size: 验证码长度(显示几个字符) // fontSize: 验证码的字体大小 // width: 验证码的宽度 // height: 验证码的高度 // background: 验证码的背景颜色 class VerifyToolsService extends Service { async captcha() { // 第三方插件,实现验证码功能 const captcha = svgCaptcha.create(options); // 将验证码text文本保存到session中 this.ctx.session.code = captcha.text; return captcha; } } module.exports = VerifyToolsService;
config/config.default.js
// 数据库配置信息 config.mysql = { client: { host: ‘localhost‘, port: ‘3306‘, user: ‘root‘, password: ‘123456‘, database: ‘userdatabase‘, }, app: true, // 是否加载到app上,默认开启 agent: false, // 是否加载到agent上,默认关闭 }; // post请求安全规范 config.security = { csrf: { enable: false, }, }; // 上传文件开启file模式 config.multipart = { mode: ‘file‘, };
config/plugin.js
//启用mysql插件
mysql: { enable: true, package: ‘egg-mysql‘, },
以上是关于node_egg_验证码注册的主要内容,如果未能解决你的问题,请参考以下文章