中间件
中间件
本文将介绍 Lavas 中间件的用法。
如果您想在进入路由组件之前,执行某些统一处理,就可以考虑使用中间件了。在同构应用中,中间件可以运行在客户端,服务端或者两者兼具的场景内。在实现中 Lavas 参考了 Nuxt 的实现,通过 vue-router 的路由钩子让中间件顺序执行。
对于开发者,如果想要使用中间件,需要完成以下两步:
- 将编写的中间件放在项目根目录
/middlewares
文件夹下,如果开发者不需要中间件可以删除该文件夹
下面我们将介绍中间件的具体编写方法。
中间件方法说明
编写中间件十分简单,需要创建一个单独文件,放在 /middlewares
文件夹下,其中暴露的中间件方法签名如下:
12345// middlewares/my-first-middleware.js
export default function (context) {
console.log('This is my first middleware.'
}
其中中间件上下文对象 context
包含以下重要属性方法:
isClient|isServer
当前中间件运行环境,是客户端还是服务端。
利用这个上下文对象,开发者能够实现所需业务逻辑。另外,中间件的实现全都在 Lavas 项目内,其中:
- 上下文对象定义在项目
.lavas/middleware.js
文件中的getClientContext/getServerContext
方法内。这意味着开发者可以自由扩展这个上下文对象,挂载任意自定义属性在上面。
中间件的声明
中间件编写完毕,我们需要通过配置,声明实际想要使用的中间件。中间件的名称可以声明在以下两个地方:
- 全局性的中间件,即所有路由组件都会执行的。定义在
lavas.config.js
中的middleware
配置项内
对于全局性的中间件,可以在 lavas.config.js
配置文件中配置运行环境:客户端、服务端还是两者兼具。以上面例子中的 my-first-middleware
为例,如果想让这个中间件仅在客户端运行,可以这样配置:
123456789// lavas.config.js
{
middleware: {
all: [], // 同时运行在客户端和服务端
client: ['my-first-middleware'], // 仅客户端
server: [] // 仅服务端
}
}
而对于路由组件级别的中间件,只需要定义在组件实例属性中就行了。这样只有这个路由组件会运行这个中间件。如果需要像全局中间件一样指定运行环境,可以通过中间件上下文对象中的 isClient|isServer
在中间件内部进行区别处理。
123456789// MyComponent.vue
<script>
export default {
name: 'my-component',
data() {},
middleware: ['my-first-middleware'],
// 省略其他属性
};
</script>
注意:Lavas 只会引用用户配置声明的中间件,将其打包在最终构建产物中,并不是 /middlewares
下的中间件都会被引用。同样,也不会引用无关的中间件,例如配置仅运行在服务端的中间件及其依赖,并不会被打包进客户端代码中。