react-routerと連携して、反応アプリケーションのサーバーサイド/同形レンダリングを試行しています。renderPropsはサーバー側で定義されていません/ React-Router + Node/Express.jsの同形レンダリング
マイroute.js
:
import React from 'react';
import { Route } from 'react-router';
import Test from './components/test';
export default (
<Route path="/test" component={ Test }>
</Route>
);
マイserver.js
:
'use strict';
require('babel-core/register')
var path = require('path');
var express = require('express');
var logger = require('morgan');
var compression = require('compression');
var http = require('http');
var ReactDOM = require('react-dom/server');
var Router = require('react-router');
var match = Router.match;
var RoutingContext = Router.RoutingContext;
var routes = require('./src/routes');
var app = express();
var server;
var PORT = process.env.PORT || 3000
app.use(logger('dev'));
app.use(compression());
// Set path to public assets
app.use(express.static(path.join(__dirname, 'public')));
app.get('*', function(req, res) {
console.log('URL: ', req.url);
console.log('Routes: ', routes);
match({ routes: routes, location: req.url }, (error, redirectLocation, renderProps) => {
console.log('Render Props: ', renderProps)
if (error) {
res.status(500).send(error.message)
} else if (redirectLocation) {
res.redirect(302, redirectLocation.pathname + redirectLocation.search);
} else if (renderProps) {
res.status(200).send(ReactDOM.renderToString(React.createElement(RoutingContext, renderProps)))
} else {
res.status(404).send('Not found')
}
})
})
server = http.createServer(app);
server.listen('3000',() => {
console.log('Express server listening on port ' + PORT);
});
私はNPMの実行を実行するときに、それは単にserver.js
にnode
を呼び出して開始します。サーバーは正常に起動しますが、/test
を含むすべての要求は404として戻ってきます。
私はconsole.logをreq.urlし、適切なURLを返しています。私は "ルート"ファイルについても同じことをしており、それは間違いなく正しいファイルを見つけることです。ここでは、これらのログからの出力は次のようになります。
Express server listening on port 3000
URL: /test
Routes: { default:
{ '$$typeof': Symbol(react.element),
type:
{ [Function]
displayName: 'Route',
createRouteFromReactElement: [Function: createRouteFromReactElement],
propTypes: [Object] },
key: null,
ref: null,
props: { path: '/test', component: [Object] },
_owner: null,
_store: {} } }
Render Props: undefined
GET /test 404 19.596 ms - 9
renderProps
は常に定義されていないとの応答が404を返す私はきちんと例に従っ思ったが、私は私が間違っているところはわからないが。
あなたは解決策を見つけましたか? – nrgwsth