Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // configureStore.js
- export default function configureStore(initialState: State, Raven: any): Store {
- const middlewares = [
- // Other middlewares
- createRavenMiddleware(Raven, ravenMiddlewareOptions)
- ];
- // configure store
- return createStore(/**/);
- }
- // universalRaven.js
- export interface UniversalRaven {
- captureException(ex: Error, options?: RavenOptions): *;
- setDataCallback(data: any, orig?: any): *;
- captureException(ex: Error, options?: RavenOptions): *;
- }
- // Mimic raven-js API
- export class UniversalRavenNode implements UniversalRaven {
- raven: any;
- dataCallback: any => any = state => state;
- constructor(raven: any) {
- this.raven = raven;
- }
- // This is neccecary to get proper timing
- captureBreadcrumb = (data: any) => this.raven.captureBreadcrumb(data);
- setDataCallback = (callback: any) => (this.dataCallback = callback);
- captureException = (error: Error, extraData: any = {}) => {
- const data = this.dataCallback({
- extra: {},
- ...extraData
- });
- return this.raven.captureException(error, data);
- };
- }
- // server/render.js
- function render(req: $Request, res: $Response, next: Middleware) {
- match({ routes, location: req.url }, (err, redirect, renderProps) => {
- // This will set the user context for the given request
- Raven.context(function() {
- // init react & redux stuff
- const raven = new UniversalRavenNode(Raven);
- const store = configureStore({}, raven);
- const respond = (error: Error) => {
- if (error) {
- raven.captureException(error);
- }
- // Render and return the
- };
- // Run all SSR requests
- prepareWithTimeout(app).then(respond, respond);
- });
- });
- }
- // client/index.js
- import Raven from 'raven-js';
- const store = configureStore(preloadedState, Raven);
Add Comment
Please, Sign In to add comment