代码拉取完成,页面将自动刷新
同步操作将从 水往高处流/le-vue-ssr-demo 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
// 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('启动成功')
})
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。