vue/cli3 构建的ssr项目,mode为history,刷新出现Internal Server Error进行处理

我的server.js文件是这样的,针对页面刷新错误该如何处理

const path = require("path");  
const Koa = require('koa');  
const Router = require('koa-router')  
const send = require('koa-send')  
const koaStatic = require("koa-static")  
const koaMount = require('koa-mount')  
  
const router = new Router()  
const app = new Koa()  
  
const resolve = file => path.resolve(__dirname, file);  
  
  
// 第 2 步:获得一个createBundleRenderer  
const { createBundleRenderer } = require("vue-server-renderer");  
const bundle = require("./dist/vue-ssr-server-bundle.json");  
const clientManifest = require("./dist/vue-ssr-client-manifest.json");  
  
const renderer = createBundleRenderer(bundle, {  
  runInNewContext: false,  
  template: fs.readFileSync(resolve("./dist/index.template.html"), "utf-8"),  
  clientManifest: clientManifest  
});  
  
function renderToString(context) {  
  return new Promise((resolve, reject) => {  
    renderer.renderToString(context, (err, html) => {  
      err ? reject(err) : resolve(html);  
  });  
  });  
}  
  
// 第 3 步:添加一个中间件来处理所有请求  
const handleRequest = async (ctx, next) => {  
  
  const url = ctx.path  
  if (url.includes('.')) {  
    return await send(ctx, url, {root: path.resolve(__dirname,'./dist')})  
  }  
  
  ctx.res.setHeader("Content-Type", "text/html");  
  const context = {  
    title: "ssr test",  
  url  
  };  
  // 将 context 数据渲染为 HTML  const html = await renderToString(context);  
  ctx.body = html;  
}  
router.get('*', handleRequest)  
  
  
app.use(router.routes()).use(router.allowedMethods())  
// 开放目录  
app.use(koaMount('/dist', koaStatic(resolve("./dist"))));  
  
const port = 5081;  
  
app.listen(port, () => {  
  console.log(server started at http://localhost:${port});  
阅读 1.7k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题