localStorage undefined Angular Server Side Rendering
Here’s a pretty quick fix to get localStorage
available in your Angular Server-Side Rendering application.
This article assumes you followed the Angular Server-Side Rendering Story: https://github.com/angular/angular-cli/wiki/stories-universal-rendering
Step 1
Install https://github.com/capaj/localstorage-polyfill npm install localstorage-polyfill
Step 2
Add this to your server.ts
file:
import 'localstorage-polyfill' global['localStorage'] = localStorage;
Step 3
Rebuild your project. npm run build:ssr
and serve locally as npm run serve:ssr
. All localStorage
errors should be suppressed now.
Bonus Step
If you have other errors related to document undefined
and window undefined
, you might wanna try this approach.
Install mock-browser
and use it like this:
const MockBrowser = require('mock-browser').mocks.MockBrowser; const mock = new MockBrowser(); .... global['document'] = mock.getDocument(); global['window'] = mock.getWindow();
You’re good to go!
Conclusion
You don’t have to change ANY part of your actual Angular code. The above approach makes sure localstorage-polyfill
is available for global use.
If you’re wondering how to run your SSR (Server Side Rendering) app in production using Nginx, check out this other article I wrote: Serving Angular SSR via Nginx Proxy