javascript - ReactRouter.match has no callback arguments when attempting to server-render react elements -
i've tried following this guide , this question, getting undefined callback arguments when reactrouter.match
fired.
this server:
var app = new (require('express'))() var port = 3000 var reactdomserver = require('react-dom/server'); var reactrouter = require('react-router'); var routes = require('./es6/routes.js'); app.use(function(req, res) { console.log(req.url); reactrouter.match({ routes: routes, location: req.url }, function(error, redirectlocation, renderprops) { console.log('error', error); // undefined console.log('erredirectlocationror', redirectlocation); // undefined console.log('renderprops', renderprops); // undefined }); }) app.listen(port, function(error) { if (error) { console.error(error) } else { console.info("==> listening on port %s. open http://localhost:%s/ in browser.", port, port) } })
like comments show, error
, redirectlocation
, , renderprops
log undefined
.
logging routes
variable kicks off:
{ default: { '$$typeof': symbol(react.element), type: { [function] displayname: 'route', createroutefromreactelement: [function: createroutefromreactelement], proptypes: [object] }, key: null, ref: null, props: { path: '/', component: [function: app], children: [object] }, _owner: null, _store: {} } }
it starts typescript file, routes.tsx:
import * react 'react' import { route } 'react-router' import app './containers/app'; import home './containers/home'; export default ( <route path='/' component={app}> <route path='/home' component={home} /> </route> )
which compiles es6/routes.js
"use strict"; const react = require('react'); const react_router_1 = require('react-router'); const app_1 = require('./containers/app'); const home_1 = require('./containers/home'); object.defineproperty(exports, "__esmodule", { value: true }); exports.default = (react.createelement(react_router_1.route, {path: '/', component: app_1.default}, react.createelement(react_router_1.route, {path: '/home', component: home_1.default}))); //# sourcemappingurl=routes.js.map
what missing?
you getting undefined
values because nothing matching, it's 404ing.
the reason nothing matching because mixing es5 , es6 modules. try passing routes.default
match().