具有React-Route与REST API路由的同构Javascript路由

时间:2015-05-16 05:27:15

标签: reactjs isomorphic-javascript

我一直在研究react / flux / react-router以及如何在服务器中预呈现虚拟DOM。在服务器中调用Router.run()renderToString将负责预先渲染服务器中的页面,并懒惰地将其余的.js文件加载并下载到客户端。 React-router在任何方案(客户端或服务器)中处理 UI URL 。这不一定与服务器的 REST API URL 相同。

添加路由功能的最佳做法是什么?如果我想将后端用于具有REST功能的本机应用程序。我是否应该为express.js提供一套完整的路由定义,并重新定义react-routes中的所有路由?

React路线不一定类似于快速路线(可以有更多或更少的路线模式)。因此,复制路线定义似乎是不可避免的。那是对的吗?甚至this例子似乎在做同样的事情。

我希望找到一种方法来重复使用路由定义或更干的东西。

2 个答案:

答案 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.