From 8756103a0b5c351335cad7e18c0990fd02f2b00f Mon Sep 17 00:00:00 2001 From: Mrau Hu Date: Tue, 11 Feb 2020 20:32:48 +0300 Subject: [PATCH 1/2] Updated `writeServerError(). Add support for reject `code` and `message`: * `message` is now setting HTTP status code, 500 by default; * `message` appends to body, 'Server Error' by default. --- packages/vue-ssr/README.md | 2 +- packages/vue-ssr/server/index.js | 7 ++++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/packages/vue-ssr/README.md b/packages/vue-ssr/README.md index 7876772..2689376 100644 --- a/packages/vue-ssr/README.md +++ b/packages/vue-ssr/README.md @@ -84,7 +84,7 @@ VueSSR.createApp = function (context) { // no matched routes if (!matchedComponents.length) { - reject({ code: 404 }) + reject({ code: 404, message: 'Not found' }) } // Can use components prefetch here... diff --git a/packages/vue-ssr/server/index.js b/packages/vue-ssr/server/index.js index de7e855..5847b77 100644 --- a/packages/vue-ssr/server/index.js +++ b/packages/vue-ssr/server/index.js @@ -64,8 +64,9 @@ patchSubscribeData(VueSSR) const renderer = createRenderer() -function writeServerError (sink) { - sink.appendToBody('Server Error') +function writeServerError (sink, { code = 500, message = 'Server Error' } = {}) { + sink.setStatusCode(code) + sink.appendToBody(message) } WebApp.rawConnectHandlers.use(cookieParser()) @@ -137,7 +138,7 @@ onPageLoad(sink => new Promise((resolve, reject) => { ) }).catch(e => { console.error(e) - writeServerError(sink) + writeServerError(sink, e) resolve() }) } catch (error) { From 56f61c958a6a581d9d02bef13ada525c4f78d16f Mon Sep 17 00:00:00 2001 From: Mrau Hu Date: Tue, 11 Feb 2020 20:59:40 +0300 Subject: [PATCH 2/2] Added: support for HTTP status code (200 by default) and example of custom 404 error. --- packages/vue-ssr/README.md | 54 ++++++++++++++++++++++++++++++++ packages/vue-ssr/server/index.js | 2 ++ 2 files changed, 56 insertions(+) diff --git a/packages/vue-ssr/README.md b/packages/vue-ssr/README.md index 2689376..b70856f 100644 --- a/packages/vue-ssr/README.md +++ b/packages/vue-ssr/README.md @@ -152,6 +152,60 @@ VueSSR.createApp = function (context) { } ``` +### Set status code for custom 404 error template + +`NotFound.vue` + +```vue + + + +``` + +`routes.js` + +```javascript +import NotFound from '/imports/ui/views/NotFound'; + +export default [ + // ... + { + path: '*', + name: 'not-found', + component: NotFound, + }, +]; +``` + +`vue-ssr.js` + +```javascript +VueSSR.createApp = function (context) { + return new Promise((resolve, reject) => { + const { app, router } = CreateApp() + // Set the URL in the router + router.push(context.url) + + router.onReady(() => { + // name of wildcard route + if (router.currentRoute.name === 'not-found') { + context.statusCode = 404; + } + + // ... + + resolve(app) + }) + }) +} +``` + --- LICENCE ISC - Created by Guillaume CHAU (@Akryum) diff --git a/packages/vue-ssr/server/index.js b/packages/vue-ssr/server/index.js index 5847b77..212af22 100644 --- a/packages/vue-ssr/server/index.js +++ b/packages/vue-ssr/server/index.js @@ -126,9 +126,11 @@ onPageLoad(sink => new Promise((resolve, reject) => { const head = ((appendHtml && appendHtml.head) || context.head) || '' const body = ((appendHtml && appendHtml.body) || context.body) || '' const js = ((appendHtml && appendHtml.js) || context.js) || '' + const statusCode = ((appendHtml && appendHtml.statusCode) || context.statusCode) || 200 const script = js && `` + sink.setStatusCode(statusCode) sink.renderIntoElementById(VueSSR.outlet, html) sink.appendToHead(head) sink.appendToBody([body, script])