Инициализируйте сокетное соединение только при выполнении условия - PullRequest
0 голосов
/ 11 сентября 2018

Я пытаюсь создать сокет-соединение в своем веб-приложении реагировать / редуцировать и пытаюсь инициализировать сокет-соединение только тогда, когда пользователь вошел в систему. Мой экземпляр сокета в настоящее время находится в промежуточном программном обеспечении, но когда я пытаюсь проверить,пользователь вошел в систему, я получаю сообщение об ошибке, подобное этому Uncaught TypeError: Cannot read property 'apply' of undefined.Вот фрагмент кода промежуточного программного обеспечения:

const socketMiddleWare = url => store => {
  if (store.getState().user.username) {
    const socket = new SockJS(url, [], {
      sessionId: () => custom_token_id
    });
    socket.onopen = e => {
      console.log("Connection", e.type);

      if (e.type === "open") {
        store.dispatch({ type: types.TOGGLE_SOCK_OPENED });
        createSession(custom_token_id, store);
      }
    };

    socket.onclose = () => {
      console.log("Connection closed");
    };

    socket.onmessage = e => {
      const message = JSON.parse(e.data);
    };

    return next => action => {
      if (
        action.type === types.SEND_SOCKET_MESSAGE
      ) {
        socket.send(JSON.stringify(action.payload));
        return;
      } else if (action.type === types.USER_LOGGED_OUT) {
        socket.close();
      }
      next(action);
    };
  }
};
`

`
const middleWare = applyMiddleware(
     routerMiddleware(history),
     sagaMiddleware,
     promise(),
     thunk,
     socketMiddleWare(`${config("LOCALHOST").url}`)
  );
`

`
const composeEnhancers = window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ || compose;
export const store = createStore(
  rootReducer,
  persistedState,
  composeEnhancers(middleWare)
);

Спасибо.

...