Egg.js中间件的核心用法

本文涉及的产品
Serverless 应用引擎 SAE,800核*时 1600GiB*时
性能测试 PTS,5000VUM额度
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: Egg.js中间件的核心用法

一、在应用中使用中间件

  1. 在app/middleware文件夹下新建一个auth2.js
module.exports = (option,app) => {
  return async function auth2(ctx,next) {
    console.log(new Date);
    // 下面的这个语句很重要,如果没有下面这个语句,线程执行到这里就要终止了
    await next();
  }
}
复制代码
  1. 注册中间件

在config.default.js中进行注册。

config.middleware = ['auth2'];
复制代码
  1. 给中间件传参
config.middleware = ['auth2'];
复制代码
  1. 中间件读取传过来的参数
return async function auth2(ctx,next) {
    console.log(option);
    console.log(new Date);
    // 下面的这个语句很重要,如果没有下面这个语句,线程执行到这里就要终止了
    await next();
  }
复制代码

二、在router.js中使用中间件

本节的目标是给指定路由配置中间件。下面的这种方式,不需要再config.default.js中注册路由了。

  1. 定义中间件的方式和上文的定义方式一致。
  2. 在router.js中获取中间件,并指定哪些路由能够触发。
module.exports = app => {
  const { router, controller } = app;
  const auth = app.middleware.auth();
  router.get('/',auth, controller.home.setSession);
  router.get('/news', controller.news.index);
  router.get('/deletecookie',controller.home.deletecookie)
};
复制代码

三、Egg.js中使用KOA的中间件

下文我们以egg中使用koa-jsonp这个中间件为例进行系统性阐述。

  1. 安装koa-jsonp
npm install koa-jsonp
复制代码
  1. 在app/middleware中新建一个jsonp.js
// 配置KOA的中间件
const jsonp = require('koa-jsonp');
module.exports = jsonp;
复制代码
  1. 注册中间件(在config.default.js)
config.middleware = ['jsonp'];
复制代码
  1. 请求指定路径
http://127.0.0.1:7001/shop?callback=666
复制代码

下文继续讲一个koa-compress的中间件,这个中间件能够开启服务器Gzip压缩的功能。

  1. 安装koa-compress
npm install koa-compress
复制代码
  1. 在app/middleware下新建一个compress.js
module.exports = require('koa-compress');
复制代码
  1. 注册中间件
config.middleware = ['jsonp','compress'];
复制代码
  1. 配置中间件的参数
config.compress = {
    threshold: 1024   // 设置压缩门限值
}
复制代码

此时访问指定页面的文件都是经过压缩的文件了。

如果是非标准的中间件,中间件的定义方式如下所示:

// 下面演示非标准中间件的使用
const middleWare = require('xxx');
module.exports = (option,app) => {
  return middleWare(options1,options2)
}
复制代码

四、中间件的通用配置

无论是引用层加载的中间件还是框架再带的中间件,都支持下面三个通用的配置项。

  1. enable:控制中间件是否开启。
  2. match:设置只有符合某些规则的请求才会经过这个中间件。
  3. ignore:设置符合某些规则的请求不经过这个中间件。
  • 禁用某个中间件
config.compress = {
    enable: false,
    threshold: 10   // 设置压缩门限值
  }
复制代码
  • 设置让某个路由能匹配中间件
config.auth = {
    match: '/news',
    title: 'auth 你好'
  }
复制代码

如果想忽略某个路由,可以使用下面的写法

config.auth = {
    ignore: '/news',
    title: 'auth 你好'
  }
复制代码

如果要处理的路由情况比较复杂,我们还可以使用下面的match方法

config.auth = {
    match(ctx) {
      if (ctx.request.url === '/shop' || ctx.request.url === "/news") {
        return true;
      }
      return false
    },
    title: 'auth 你好'
  }
复制代码

五、设置未经授权的用户无法访问指定页面

  1. 在app/middleware/ 下创建指定中间件
module.exports = (option,app) => {
  return async function auth(ctx,next) {
    if (ctx.session && ctx.session.userinfo) {
      await next()
    } else {
      if (ctx.request.url === '/') {
        await next();
      } else {
        ctx.redirect('/');
      }
    }
  }
}
复制代码
  1. 注册中间件
config.middleware = ['auth','compress','adminAuth'];
复制代码
  1. 让指定路径的路由触发中间件
config.adminAuth = {
    match: '/admin/user'
  }


相关文章
|
3月前
|
JavaScript 前端开发 Serverless
Vue.js的介绍、原理、用法、经典案例代码以及注意事项
Vue.js的介绍、原理、用法、经典案例代码以及注意事项
102 2
|
12天前
|
数据采集 Web App开发 JavaScript
Puppeteer的高级用法:如何在Node.js中实现复杂的Web Scraping
随着互联网的发展,网页数据抓取已成为数据分析和市场调研的关键手段。Puppeteer是一款由Google开发的无头浏览器工具,可在Node.js环境中模拟用户行为,高效抓取网页数据。本文将介绍如何利用Puppeteer的高级功能,通过设置代理IP、User-Agent和Cookies等技术,实现复杂的Web Scraping任务,并提供示例代码,展示如何使用亿牛云的爬虫代理来提高爬虫的成功率。通过合理配置这些参数,开发者可以有效规避目标网站的反爬机制,提升数据抓取效率。
Puppeteer的高级用法:如何在Node.js中实现复杂的Web Scraping
|
3月前
|
前端开发 JavaScript 安全
javascript:void(0);用法及常见问题解析
【6月更文挑战第3天】JavaScript 中的 `javascript:void(0)` 用于创建空操作或防止页面跳转。它常见于事件处理程序和超链接的 `href` 属性。然而,现代 web 开发推荐使用 `event.preventDefault()` 替代。使用 `javascript:void(0)` 可能涉及语法错误、微小的性能影响和XSS风险。考虑使用更安全的替代方案,如返回 false 或箭头函数。最佳实践是保持代码清晰、安全和高性能。
128 0
|
18天前
|
缓存 JavaScript 前端开发
react.js高级用法
【8月更文挑战第27天】react.js高级用法
27 2
|
1月前
|
JavaScript
js中toggleClass用法
js中toggleClass用法
21 1
|
14天前
|
JavaScript 中间件 开发者
深入浅出Node.js中间件机制
【8月更文挑战第31天】本文将带你领略Node.js中间件的奥秘,通过直观的案例分析,揭示其背后的设计哲学。你将学会如何运用中间件构建强大而灵活的后端应用,以及在面对复杂业务逻辑时如何保持代码的清晰与高效。
|
14天前
|
设计模式 JavaScript 中间件
深入浅出Node.js中间件机制
【8月更文挑战第31天】在Node.js的世界里,中间件如同魔法般存在,它让复杂的请求处理变得井然有序。本文将带你领略中间件的奥秘,从原理到实战,一步步揭开它的神秘面纱。你将学会如何运用中间件来构建强大而灵活的后端应用,就像拼乐高一样有趣。
|
1月前
|
JavaScript 前端开发 安全
js中?.、??、??=的用法及使用场景
【8月更文挑战第8天】 js中?.、??、??=的用法及使用场景
179 1
|
3月前
|
移动开发 JavaScript 前端开发
JavaScript 用法
JavaScript 用法
15 1
|
3月前
|
JavaScript 前端开发
JS中split的用法
JS中split的用法
37 1