12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- import { ssrMiddleware } from 'quasar/wrappers'
- // This middleware should execute as last one
- // since it captures everything and tries to
- // render the page with Vue
- export default ssrMiddleware(({ app, resolve, render, serve }) => {
- // we capture any other Express route and hand it
- // over to Vue and Vue Router to render our page
- app.get(resolve.urlPath('*'), (req, res) => {
- res.setHeader('Content-Type', 'text/html')
- render(/* the ssrContext: */ { req, res })
- .then(html => {
- // now let's send the rendered html to the client
- res.send(html)
- })
- .catch(err => {
- // oops, we had an error while rendering the page
- // we were told to redirect to another URL
- if (err.url) {
- if (err.code) {
- res.redirect(err.code, err.url)
- } else {
- res.redirect(err.url)
- }
- } else if (err.code === 404) {
- // hmm, Vue Router could not find the requested route
- // Should reach here only if no "catch-all" route
- // is defined in /src/routes
- res.status(404).send('404 | Page Not Found')
- } else if (process.env.DEV) {
- // well, we treat any other code as error;
- // if we're in dev mode, then we can use Quasar CLI
- // to display a nice error page that contains the stack
- // and other useful information
- // serve.error is available on dev only
- serve.error({ err, req, res })
- } else {
- // we're in production, so we should have another method
- // to display something to the client when we encounter an error
- // (for security reasons, it's not ok to display the same wealth
- // of information as we do in development)
- // Render Error Page on production or
- // create a route (/src/routes) for an error page and redirect to it
- res.status(500).send('500 | Internal Server Error')
- if (process.env.DEBUGGING) {
- console.error(err.stack)
- }
- }
- })
- })
- })
|