Egg.js中间件的核心用法

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
性能测试 PTS,5000VUM额度
Serverless 应用引擎免费试用套餐包,4320000 CU,有效期3个月
简介: 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月前
|
数据采集 Web App开发 JavaScript
Puppeteer的高级用法:如何在Node.js中实现复杂的Web Scraping
随着互联网的发展,网页数据抓取已成为数据分析和市场调研的关键手段。Puppeteer是一款由Google开发的无头浏览器工具,可在Node.js环境中模拟用户行为,高效抓取网页数据。本文将介绍如何利用Puppeteer的高级功能,通过设置代理IP、User-Agent和Cookies等技术,实现复杂的Web Scraping任务,并提供示例代码,展示如何使用亿牛云的爬虫代理来提高爬虫的成功率。通过合理配置这些参数,开发者可以有效规避目标网站的反爬机制,提升数据抓取效率。
302 4
Puppeteer的高级用法:如何在Node.js中实现复杂的Web Scraping
|
28天前
|
JavaScript 前端开发
js中的bind,call,apply方法的区别以及用法
JavaScript中,`bind`、`call`和`apply`均可改变函数的`this`指向并传递参数。其中,`bind`返回一个新函数,不立即执行;`call`和`apply`则立即执行,且`apply`的参数以数组形式传递。三者在改变`this`指向及传参上功能相似,但在执行时机和参数传递方式上有所区别。
26 1
|
28天前
|
JavaScript 前端开发
JS中的构造函数的含义和用法
构造函数是JavaScript中用于创建新对象的特殊函数,通常首字母大写。通过`new`关键字调用构造函数,可以初始化具有相同属性和方法的对象实例,从而实现代码复用。例如,定义一个`Person`构造函数,可以通过传入不同的参数创建多个`Person`对象,每个对象都有自己的属性值。此外,构造函数还可以包含方法,使每个实例都能执行特定的操作。构造函数的静态属性仅能通过构造函数本身访问。ES6引入了`class`语法糖,简化了类的定义和实例化过程。
24 1
|
1月前
|
JavaScript 安全 中间件
深入浅出Node.js中间件机制
【10月更文挑战第36天】在探索Node.js的奥秘之旅中,中间件的概念如同魔法一般,它让复杂的请求处理变得优雅而高效。本文将带你领略这一机制的魅力,从概念到实践,一步步揭示如何利用中间件简化和增强你的应用。
|
1月前
|
消息中间件 JavaScript 中间件
深入浅出Node.js中间件机制
【10月更文挑战第24天】在Node.js的世界里,中间件如同厨房中的调料,为后端服务增添风味。本文将带你走进Node.js的中间件机制,从基础概念到实际应用,一探究竟。通过生动的比喻和直观的代码示例,我们将一起解锁中间件的奥秘,让你轻松成为后端料理高手。
35 1
|
25天前
|
Web App开发 JSON JavaScript
Node.js 中的中间件机制与 Express 应用
Node.js 中的中间件机制与 Express 应用
|
2月前
|
JavaScript 前端开发
JS try catch用法:异常处理
【10月更文挑战第12天】try/catch` 是 JavaScript 中非常重要的一个特性,它可以帮助我们更好地处理程序中的异常情况,提高程序的可靠性和稳定性。
27 1
|
2月前
|
JavaScript 前端开发
js的math.max的用法
js的math.max的用法
49 6
|
2月前
|
JavaScript
JS中的splice的三种用法(删除,替换,插入)
JS中的splice的三种用法(删除,替换,插入)
261 4
|
3月前
|
数据采集 存储 JavaScript
Puppeteer的高级用法:如何在Node.js中实现复杂的Web Scraping
在现代Web开发中,数据采集尤为重要,尤其在财经领域。本文以“东财股吧”为例,介绍如何使用Puppeteer结合代理IP技术进行高效的数据抓取。Puppeteer是一个强大的Node.js库,支持无头浏览器操作,适用于复杂的数据采集任务。通过设置代理IP、User-Agent及Cookies,可显著提升抓取成功率与效率,并以示例代码展示具体实现过程,为数据分析提供有力支持。
130 2
Puppeteer的高级用法:如何在Node.js中实现复杂的Web Scraping