From fb843a5577fb9382203702926391a9628582c706 Mon Sep 17 00:00:00 2001 From: GH Lee Date: Mon, 8 Feb 2021 03:20:00 +0900 Subject: [PATCH] [examples] Fix for custom server SSR caching (#18786) --- examples/ssr-caching/package.json | 8 ++++---- examples/ssr-caching/server.js | 25 +++++++++++-------------- 2 files changed, 15 insertions(+), 18 deletions(-) diff --git a/examples/ssr-caching/package.json b/examples/ssr-caching/package.json index b792220fbda09..08ba8f60e77fb 100644 --- a/examples/ssr-caching/package.json +++ b/examples/ssr-caching/package.json @@ -7,12 +7,12 @@ "start": "cross-env NODE_ENV=production node server.js" }, "dependencies": { - "cacheable-response": "^1.1.0", + "cacheable-response": "^2.1.6", "cross-env": "^7.0.2", - "express": "^4.14.0", + "express": "^4.17.1", "next": "latest", - "react": "^16.7.0", - "react-dom": "^16.7.0" + "react": "^17.0.1", + "react-dom": "^17.0.1" }, "license": "MIT" } diff --git a/examples/ssr-caching/server.js b/examples/ssr-caching/server.js index 50f67faf8487a..8d0a0927ab8be 100644 --- a/examples/ssr-caching/server.js +++ b/examples/ssr-caching/server.js @@ -11,18 +11,17 @@ const handle = app.getRequestHandler() const ssrCache = cacheableResponse({ ttl: 1000 * 60 * 60, // 1hour get: async ({ req, res }) => { - const data = await app.render(req, res, req.path, { - ...req.query, - ...req.params, + const rawResEnd = res.end + const data = await new Promise((resolve) => { + res.end = (payload) => { + resolve(res.statusCode === 200 && payload) + } + app.render(req, res, req.path, { + ...req.query, + ...req.params, + }) }) - - // Add here custom logic for when you do not want to cache the page, for - // example when the page returns a 404 status code: - if (res.statusCode === 404) { - res.end(data) - return - } - + res.end = rawResEnd return { data } }, send: ({ data, res }) => res.send(data), @@ -33,9 +32,7 @@ app.prepare().then(() => { server.get('/', (req, res) => ssrCache({ req, res })) - server.get('/blog/:id', (req, res) => { - return ssrCache({ req, res }) - }) + server.get('/blog/:id', (req, res) => ssrCache({ req, res })) server.get('*', (req, res) => handle(req, res))