From 3f20100e40d86a59c57f6c7ca1ecb016299509fa Mon Sep 17 00:00:00 2001 From: Kimmo Puputti Date: Tue, 28 Mar 2017 15:22:59 +0300 Subject: [PATCH] Fix preloadedState serialisation - Use reviver and replacer from the SDK to properly encode/decode the SDK types --- server/renderer.js | 10 ++++++++-- src/index.js | 5 +++-- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/server/renderer.js b/server/renderer.js index 415141ee..2cbe3712 100644 --- a/server/renderer.js +++ b/server/renderer.js @@ -1,6 +1,7 @@ const path = require('path'); const fs = require('fs'); const _ = require('lodash'); +const { types } = require('sharetribe-sdk'); const { renderApp } = require('./importer'); const buildPath = path.resolve(__dirname, '..', 'build'); @@ -43,9 +44,14 @@ exports.render = function(requestUrl, context, preloadedState) { // For security reasons we ensure that preloaded state is considered as a string // by replacing '<' character with its unicode equivalent. // http://redux.js.org/docs/recipes/ServerRendering.html#security-considerations - const serializedState = JSON.stringify(preloadedState).replace(/window.__PRELOADED_STATE__ = ${serializedState}; + `; return template({ title: head.title.toString(), preloadedStateScript, body }); diff --git a/src/index.js b/src/index.js index fa803020..5cf465fb 100644 --- a/src/index.js +++ b/src/index.js @@ -53,9 +53,10 @@ const renderWhenAuthInfoLoaded = store => { // If we're in a browser already, render the client application. if (typeof window !== 'undefined') { // eslint-disable-next-line no-underscore-dangle - const preloadedState = window.__PRELOADED_STATE__ || {}; + const preloadedState = window.__PRELOADED_STATE__ || '{}'; + const initialState = JSON.parse(preloadedState, types.reviver); const sdk = createInstance({ clientId: config.sdk.clientId, baseUrl: config.sdk.baseUrl }); - const store = configureStore(sdk, preloadedState); + const store = configureStore(sdk, initialState); store.runSaga(createRootSaga(sdk));