1 Star 0 Fork 1

marty / le-vue-ssr-demo

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
server.js 1.48 KB
一键复制 编辑 原始数据 按行查看 历史
水往高处流 提交于 2022-03-04 19:49 . 初始化
// server.js
const Koa = require('koa')
const app = new Koa()
const path = require('path')
const fs = require('fs')
const Router = require('koa-router')
const send = require('koa-send')
const router = new Router()
const { createBundleRenderer } = require('vue-server-renderer')
const serverBundle = require('./dist/server/vue-ssr-server-bundle.json')
const clientManifest = require('./dist/client/vue-ssr-client-manifest.json')
const renderer = createBundleRenderer(serverBundle, {
runInNewContext: false,
template: fs.readFileSync('./index.ssr.html', 'utf-8'),
clientManifest
})
function renderToString(context) {
return new Promise((resolve, reject) => {
renderer.renderToString(context, (err, html) => {
err ? reject(err) : resolve(html);
});
});
}
/* gzip压缩配置 start */
const compress = require('koa-compress');
const options = {
threshold: 1024 //数据超过1kb时压缩
};
app.use(compress(options));
/* gzip压缩配置 end */
router.get('*', async (ctx, next) => {
// console.log("地址",ctx.path)
const url = ctx.path;
if(url.includes('.')){
console.log(`proxy ${url}`)
return await send(ctx, url, {root: path.resolve(__dirname,'./dist/client')})
}
const context = {
url: url
}
ctx.res.setHeader("Content-Type", "text/html");
// 将 context 数据渲染为 HTML
const html = await renderToString(context);
ctx.body = html;
})
app.use(router.routes()).use(router.allowedMethods())
app.listen(8001,()=>{
console.log('启动成功')
})
1
https://gitee.com/julywind/le-vue-ssr-demo.git
git@gitee.com:julywind/le-vue-ssr-demo.git
julywind
le-vue-ssr-demo
le-vue-ssr-demo
master

搜索帮助