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;
  }


相关文章
|
21天前
|
JSON JavaScript 前端开发
[JS]面试官:你的简历上写着熟悉jsonp,那你说说它的底层逻辑是怎样的?
本文介绍了JSONP的工作原理及其在解决跨域请求中的应用。首先解释了同源策略的概念,然后通过多个示例详细阐述了JSONP如何通过动态解释服务端返回的JavaScript脚本来实现跨域数据交互。文章还探讨了使用jQuery的`$.ajax`方法封装JSONP请求的方式,并提供了具体的代码示例。最后,通过一个更复杂的示例展示了如何处理JSON格式的响应数据。
30 2
[JS]面试官:你的简历上写着熟悉jsonp,那你说说它的底层逻辑是怎样的?
|
2月前
|
JavaScript 前端开发
局部 JavaScript 变量
JavaScript 中,函数内部使用 `var` 声明的变量为局部变量,仅在函数内可见,函数执行完毕后被删除。全局变量则在函数外部声明,整个页面的脚本和函数均可访问,页面关闭后才被删除。未声明的变量赋值会自动成为 `window` 对象的属性,且在非严格模式下可被删除。
|
4月前
|
数据采集 JavaScript 前端开发
通过ClearScript V8在.NET中执行复杂JavaScript逻辑
爬虫技术是数据采集的关键手段。针对动态加载的网页,传统HTTP请求及HTML解析难以满足需求。本文章介绍如何利用ClearScript V8库在.NET环境中执行复杂的JavaScript逻辑,以提高爬虫对动态内容的抓取效率。文章首先概述了ClearScript V8的功能,如何处理如微博这类含有大量动态加载内容的网站。通过使用代理IP、设置cookie和user-agent等方式模拟真实用户访问,确保了爬虫的稳定性和隐蔽性。提供了一个具体的C#爬虫示例,演示如何结合ClearScript V8和HTTP客户端来实现上述功能。这种方法不仅增强爬虫的灵活性,也极大地提高数据采集的效率和可靠性。
119 1
通过ClearScript V8在.NET中执行复杂JavaScript逻辑
|
4月前
|
设计模式 架构师 数据建模
架构师必备底层逻辑:设计与建模的技术深度探索
【8月更文挑战第13天】在软件开发的浩瀚星海中,架构师如同星辰指引,他们不仅规划着系统的蓝图,更在底层逻辑上精雕细琢,确保系统的稳健与高效。其中,“设计与建模”作为架构师的核心能力之一,是连接业务需求与技术实现的桥梁。本文将深入探讨架构师在设计与建模过程中的关键思维与实践方法,为工作学习中的技术同仁提供一份宝贵的干货分享。
48 3
|
4月前
|
JavaScript 前端开发
JavaScript基础&实战(4)js中的对象、函数、全局作用域和局部作用域
这篇文章介绍了JavaScript中对象的基本概念和操作,包括对象属性和方法的使用、对象字面量的创建、函数的定义和作用域的概念,以及全局作用域和局部作用域的区别和特性。
JavaScript基础&实战(4)js中的对象、函数、全局作用域和局部作用域
|
4月前
|
开发工具 Android开发
Android项目架构设计问题之SDK内部减少每次回调时的冗余判断逻辑如何解决
Android项目架构设计问题之SDK内部减少每次回调时的冗余判断逻辑如何解决
40 0
|
4月前
|
Android开发 iOS开发
Android项目架构设计问题之将隐式跳转的逻辑进行抽象和封装如何解决
Android项目架构设计问题之将隐式跳转的逻辑进行抽象和封装如何解决
45 0
|
5月前
软件复用问题之复用决策中,业务架构和技术之间有何关系
软件复用问题之复用决策中,业务架构和技术之间有何关系
|
5月前
业务系统架构实践问题之如何在biz层复用domain层的服务如何解决
业务系统架构实践问题之如何在biz层复用domain层的服务如何解决
|
4月前
|
JavaScript 前端开发
JS:类型转换(四)从底层逻辑让你搞懂经典面试问题 [ ] == ![ ] ?
JS:类型转换(四)从底层逻辑让你搞懂经典面试问题 [ ] == ![ ] ?
下一篇
无影云桌面