Egg.js中复用静态页面逻辑、局部刷新架构、生成验证码

简介: Egg.js中复用静态页面逻辑、局部刷新架构、生成验证码

这是我参与11月更文挑战的第12天,活动详情查看:2021最后一次更文挑战

配置ejs模板引擎

  • 安装插件
npm i egg-view-js
复制代码
  • 在plugin.js中添加下列代码
module.exports = {
  // had enabled by egg
  static: {
    enable: true
  },
  ejs: {
    enable: true,
    package: 'egg-view-ejs'
  }
}
复制代码
  • 在config.default.js中添加下列代码
const userConfig = {
    view: {
      mapping: {
        '.html': 'ejs'
      }
    }
  }
复制代码

对视图进行分组

将所有的页面都放在view文件夹中是不合理的,所以可以将view文件夹进行分组。

image.png

复用静态逻辑

  1. 把需要复用的静态页面抽离到一个文件夹中。
  2. 在需要复用的地方,通过下面的方式进行引入。
<% include ../public/page_header.html %>
复制代码

配置局部刷新架构

之所以要配置局部刷新架构,就是希望当我们点击某个链接的时候,能够保存原有的状态,例如浏览器导航栏的状态。

配置局部刷新的核心在于跳转路由的时候,通过target指向iframe。

<li class="list-group-item"> <a href="/admin/role/add" target="rightMain">增加角色</a></li>
<iframe name="rightMain" src="/admin/welcome" frameborder="0" width="100%" height="500"></iframe>
复制代码

基于Serverless的Egg.js后台管理系统配置Session

腾讯云的Serverless云函数如果30分钟内没有访问的话就会销毁容器,所以如果session要保存30分钟以上的话,就需要把session存储到数据库中。

配置session

  • 在config.default.js
config.session = {
    key: 'session_id_test',
    maxAge: 30*60*1000;
    httpOnly: true,
    encrypt: true,
    renew: true
  }
复制代码
  • 在控制器中设置session
this.ctx.session.username = "张三";
复制代码
  • 在控制器中读取session
this.ctx.body = this.ctx.session.username;
复制代码

生成图形验证码

  1. 安装依赖
npm install --save svg-captcha
复制代码
  1. 在控制器中进行下面的定义
const svgCaptcha = require('svg-captcha');
  // 验证码模块
  async captcha() {
    const captcha = svgCaptcha.create({
      size: 4,
      fontSize: 50,
      width: 100,
      height: 40,
      background: "#cc9966"
    });
    console.log(captcha.text);
    this.ctx.response.type = 'image/svg+xml';
    this.ctx.body = captcha.data;
  }
复制代码
  1. 静态页面获取验证码

静态验证码获取验证码是通过访问路由,让控制器返回图片来实现的。

dd>验 证 码:<input id="verify" type="text" name="verify">
<img id="verify_img" src="/admin/login/captcha" title="看不清?点击刷新" onclick="javascript:this.src='/admin/login/captcha?mt='+Math.random()">
</dd>
复制代码
  1. 将验证码保存在session中
this.ctx.session.code = captcha.text;
复制代码

如果你想复用上述的验证码逻辑,可以通过下面的方式进行封装。

  • 首先在app文件夹下创建service文件夹,并在service文件夹下创建tools.js
'use strict';
const Service = require('egg').Service;
const svgCaptcha = require('svg-captcha');
class ToolsService extends Service {
  async getCaptcha() {
    const captcha = svgCaptcha.create({
      size: 4,
      fontSize: 50,
      width: 100,
      height: 40,
      background: "#cc9966"
    });
    return captcha;
  }
}
module.exports = ToolsService;
复制代码
  • 在控制器中调用即可
async captcha() {
    let captcha = await this.service.tools.getCaptcha();
    console.log(captcha.text);
    // 将验证码保存在session中
    this.ctx.session.code = captcha.text;
    this.ctx.response.type = 'image/svg+xml';
    this.ctx.body = captcha.data;
  }


相关文章
|
6月前
|
存储 SQL 关系型数据库
【面试题精讲】MySQL逻辑架构
【面试题精讲】MySQL逻辑架构
|
6月前
|
存储 缓存 关系型数据库
高性能Mysql-逻辑架构
高性能Mysql-逻辑架构
|
7月前
|
自然语言处理 前端开发 JavaScript
使用 Promise 来改写 JavaScript 的加载逻辑
使用 Promise 来改写 JavaScript 的加载逻辑
56 0
|
8月前
|
SQL 缓存 Oracle
第04章 逻辑架构【1.MySQL架构篇】【MySQL高级】2
第04章 逻辑架构【1.MySQL架构篇】【MySQL高级】2
89 0
|
7月前
|
SQL 安全 网络安全
交易所开发测试版丨交易所系统开发规则玩法/架构设计/项目步骤/方案逻辑/案例解析/源码部署
The development process of the exchange system involves multiple steps and links. The following is the detailed process and steps for the development of the exchange system:
|
1月前
|
JavaScript 前端开发
js开发:请解释什么是作用域(scope),并说明全局作用域、局部作用域和块级作用域的区别。
JavaScript中的作用域规定了变量和函数的可见性与生命周期。全局作用域适用于整个脚本,变量可通过全局对象访问,可能导致命名冲突和内存占用。局部作用域限于函数内部,每次调用创建新作用域,执行完毕后销毁。ES6引入的块级作用域通过`let`和`const`实现,变量仅在其代码块内有效,并有暂时性死区。作用域机制有助于代码组织和变量管理。
23 1
|
1月前
|
监控 JavaScript 安全
监控内网电脑软件设计与实现:基于Node.js的服务器端架构分析
在当今信息技术高度发达的时代,监控内网电脑的需求日益增长。企业需要确保网络安全,个人用户也需要监控家庭网络以保护隐私和安全。本文将介绍一种基于Node.js的服务器端架构,用于设计和实现监控内网电脑软件。
99 0
|
1月前
|
小程序 JavaScript 前端开发
【微信小程序】--WXML & WXSS & JS 逻辑交互介绍(四)
【微信小程序】--WXML & WXSS & JS 逻辑交互介绍(四)
|
3月前
|
JavaScript
JS作用域(全局作用域+局部作用域)
JS作用域(全局作用域+局部作用域)
14 0
|
3月前
|
移动开发 JavaScript HTML5
JS实现轮播图(一看就懂逻辑清晰)
JS实现轮播图(一看就懂逻辑清晰)