我一直在研究react / flux / react-router以及如何在服务器中预呈现虚拟DOM。在服务器中调用Router.run()
和renderToString
将负责预先渲染服务器中的页面,并懒惰地将其余的.js文件加载并下载到客户端。 React-router在任何方案(客户端或服务器)中处理 UI URL 。这不一定与服务器的 REST API URL 相同。
添加路由功能的最佳做法是什么?如果我想将后端用于具有REST功能的本机应用程序。我是否应该为express.js提供一套完整的路由定义,并重新定义react-routes中的所有路由?
React路线不一定类似于快速路线(可以有更多或更少的路线模式)。因此,复制路线定义似乎是不可避免的。那是对的吗?甚至this例子似乎在做同样的事情。
我希望找到一种方法来重复使用路由定义或更干的东西。
答案 0 :(得分:1)
您不想在客户端和服务器上复制路由。请参阅Yahoo的焊接示例:https://github.com/yahoo/flux-examples/tree/master/react-router
然后,只需在服务器上的反应路由器之前指定API请求。 E.g:
var express = require('express');
var server = express();
// Static files
server.use('/assets', express.static('src/assets'));
server.use('/build', express.static('build'));
// Declare API handling:
require('apiRouting')(server);
// Decalre react-router handling
require('./routing.jsx')(server);
// In the apiRouting.js:
module.exports = function (server) {
server.get('/api/methodA', function (req, res) {
// body...
});
server.get('/api/methodB', function (req, res) {
// body...
});
};
答案 1 :(得分:0)
Also, there's a library that makes it so you can build your APIs in an isomorphic fashion, and re-use it in the client and server without bloating or breaking the bundle. This is what we're currently using in a big single-page application.
It's called Isomorphine, and you can find it here: https://github.com/d-oliveros/isomorphine.
Disclaimer: I'm the author of this library.