Advertisement
Guest User

Untitled

a guest
Jun 25th, 2019
115
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. const fs = require('fs');
  2. const path = require('path');
  3. const LRU = require('lru-cache');
  4. const express = require('express');
  5. const favicon = require('serve-favicon');
  6. const compression = require('compression');
  7. const microcache = require('route-cache');
  8. const resolve = file => path.resolve(__dirname, file);
  9. const {createBundleRenderer} = require('vue-server-renderer');
  10. const cookieParser = require('cookie-parser');
  11.  
  12. const config = require('./config/env.js');
  13.  
  14. const isProd = process.env.NODE_ENV === 'production';
  15. const useMicroCache = process.env.MICRO_CACHE !== 'false';
  16. const serverInfo =
  17.     `express/${require('express/package.json').version} ` +
  18.     `vue-server-renderer/${require('vue-server-renderer/package.json').version}`;
  19.  
  20. const app = express()
  21.  
  22. function createRenderer(bundle, options) {
  23.     return createBundleRenderer(bundle, Object.assign(options, {
  24.         cache: LRU({
  25.             max: 1000,
  26.             maxAge: 1000 * 60 * 15
  27.         }),
  28.         basedir: resolve('./dist'),
  29.         runInNewContext: false
  30.     }))
  31. }
  32.  
  33. let renderer;
  34. let readyPromise;
  35. const templatePath = resolve('./src/index.template.html');
  36. if (isProd) {
  37.  
  38.     const template = fs.readFileSync(templatePath, 'utf-8');
  39.     const bundle = require('./dist/vue-ssr-server-bundle.json');
  40.     const clientManifest = require('./dist/vue-ssr-client-manifest.json');
  41.     renderer = createRenderer(bundle, {
  42.         template,
  43.         clientManifest
  44.     })
  45. } else {
  46.     readyPromise = require('./build/setup-dev-server')(
  47.         app,
  48.         templatePath,
  49.         (bundle, options) => {
  50.             renderer = createRenderer(bundle, options)
  51.         }
  52.     )
  53. }
  54.  
  55. const serve = (path, cache) => express.static(resolve(path), {
  56.     maxAge: cache && isProd ? 1000 * 60 * 60 * 24 * 30 : 0
  57. });
  58.  
  59. app.use(cookieParser());
  60. app.use(compression({threshold: 0}));
  61. app.use(favicon('./public/favicon.svg'));
  62. app.use('/dist', serve('./dist', true));
  63. app.use('/public', serve('./public', true));
  64. app.use('/manifest.json', serve('./manifest.json', true));
  65. app.use('/service-worker.js', serve('./dist/service-worker.js'));
  66.  
  67.  
  68. app.use(microcache.cacheSeconds(1, req => useMicroCache && req.originalUrl));
  69.  
  70. function render(req, res) {
  71.     const s = Date.now();
  72.  
  73.     res.setHeader("Content-Type", "text/html");
  74.     res.setHeader("Server", serverInfo);
  75.  
  76.     const handleError = err => {
  77.         if (err.url) {
  78.             res.redirect(err.url)
  79.         } else if (err.code === 404) {
  80.             res.status(404).send('404 | Page Not Found')
  81.         } else {
  82.             res.status(500).send('500 | Internal Server Error');
  83.             console.error(`error during render : ${req.url}`);
  84.             console.error(err.stack)
  85.         }
  86.     };
  87.  
  88.     const context = {
  89.         title: 'SkipTyler Dev', // default title
  90.         meta: `<meta id="qq" name="description" content="" />`,
  91.         url: req.url,
  92.         cookies: req.cookies
  93.     };
  94.     renderer.renderToString(context, (err, html) => {
  95.         if (err) {
  96.             return handleError(err)
  97.         }
  98.         res.send(html);
  99.         if (!isProd) {
  100.             console.log(`whole request: ${Date.now() - s}ms`)
  101.         }
  102.     })
  103. }
  104.  
  105. app.get('*', isProd ? render : (req, res) => {
  106.     readyPromise.then(() => render(req, res))
  107. });
  108.  
  109. const port = process.env.PORT || config.VUE_PORT;
  110. app.listen(port, () => {
  111.     console.log(`server started at localhost:${port}`)
  112. });
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement