Вопрос о заполнении данных хранилища в изоморфных потоковых приложениях. (Я использую react, alt, iso и node, но теория применима и к другим примерам)
У меня есть "магазин" потока (http://alt.js.org/docs/stores/), которому нужно получить данные из API:
getState() {
return {
data : makeHttpRequest(url)
}
}
и по мере того, как пользователь перемещается по SPA, дополнительные данные будут загружаться через HTTP-запросы.
Я хочу, чтобы это приложение было изоморфным, чтобы я мог отображать приложения в полном html, включая последнюю сторону сервера данных, и возвращать его пользователю для быстрой начальной загрузки страницы.
react.renderToString() позволяет мне визуализировать приложение как html, и я могу заполнить данные, используя alt&iso, например:
storeData = { "MyStore" : {"key" : "value"}}; // set data for store
alt.bootstrap(JSON.stringify(storeData || {})); // seed store with data
var content = React.renderToString(React.createElement(myApp)); // render react app to html
Проблема в том, что я увижу ошибки при запуске на стороне сервера js, так как магазин захочет сделать http-запрос, который он не сможет сделать (поскольку xmlhttprequest не будет существовать в узле)
Какой лучший способ решить эту проблему?
Единственное решение, которое я могу придумать, это обернуть httprequest из магазина:
var ExecutionEnvironment = require('react/lib/ExecutionEnvironment');
...
if (ExecutionEnvironment.canUseDOM) {
// make http request
} else {
// do nothing
}
Есть идеи получше? Заранее спасибо.