关于同构通量应用程序中存储数据填充的问题。(我正在使用 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
}
有更好的想法吗?提前致谢。