以编程方式使用 Lavas

以编程方式使用 Lavas

使用 lavas init 创建的模版项目中,在以下场景下都会以编程方式使用 Lavas:

  • server.dev.js 开发环境下的 SPA/SSR 模式。

可见以编程方式使用 Lavas 的主要场景就是 SSR 模式,而在 SPA 模式下仅仅是供开发服务器使用。因此,如果开发者选择了 SSR 模式,阅读下面的内容将十分有帮助:

  • 如何选择性使用 Lavas 内置中间件

Lavas 内置中间件

Lavas 封装了一系列中间件,暴露 express/koaMiddleware() 方法供开发者便捷使用。对于简单的应用场景,直接调用即可运行:

12// 以 express 为例 app.use(core.expressMiddleware()

下面我们将详细介绍 Lavas 内置的中间件,以便开发者了解内部细节之后进行某些中间件的替换。

  • static 响应静态资源

对于这些中间件,开发者可以选择性使用。例如不想使用 static 中间件处理静态资源,而采用 nginx 处理,可以从中间件列表中去掉 static 这个中间件:

12345678// 去掉 static 中间件 app.use(core.koaMiddleware([ 'favicon', // 'static', 'service-worker', 'ssr', 'error' ])

在开发模式下,Lavas 使用了 webpack-dev-middlewarewebpack-hot-middleware 从内存文件系统响应静态资源以及实现 hotreload 相关功能,对于这两个通用的中间件,我们并不打算提供关闭功能。

使用 render() 自定义 SSR 中间件

为了满足对于自定义 SSR 中间件的需求,Lavas 提供了 render() 方法。以 express 为例,可以这样定义一个简单的 SSR 中间件:

123456789101112// 自定义 SSR express 中间件 app.use((req, res, next) => { // render 方法 core.render{ url: req.url }).then(result => { if (result.err) { return next(result.err } res.end(result.html } }

render() 方法接收的参数对象包含如下属性:

  • url 请求 URL,供 vue-router 查找匹配的路由对象

而方法返回的 Promise 对象包含以下两个属性:

  • err 渲染过程中的错误对象

注意事项

Lavas 内置的中间件以固定的顺序执行,这是由于某些中间件的执行顺序是不能随意更改的,例如错误处理必须放在最后。

因此,在以下场景下,例如开发者如果只想替换 SSR 中间件,而仍旧使用 Lavas 内置的错误处理中间件,可以这样:

123456// 其余 Lavas 中间件 app.use(core.expressMiddleware(['static', 'service-worker']) // 自定义 SSR express 中间件 app.use((req, res, next) => {} // Lavas error 中间件必须放到最后 app.use(core.expressMiddleware('error')