2017-02-18 8 views
0

Я предоставляю свое приложение React на сервере, но получаю эту ошибку TypeError: match is not a function. Я понятия не имею, как это исправить или что эта ошибка означает, потому что документы-ответчики-маршрутизаторы говорят другое.Почему я получаю совпадение, это не функция, когда она четко определена?

var routes = require('./public/src/routes'); 
var React = require('react'); 
var renderToString = require('react-dom/server'); 
var match = require('react-router'); 
var RouterContext = require('react-router'); 

app.get('*', (req, res) => { 
    match(
    { routes, location: req.url }, 
    (err, redirectLocation, renderProps) => { 
     if (err) { 
     return res.status(500).send(err.message); 
     } 
     let markup; 
     if(renderProps) { 
     markup = renderToString(React.createElement(RoutingContext, renderProps)); 
     } 
     return res.render('index', { markup }); 
    } 
) 
}) 
+0

Где именно вы видите здесь «матч»? https://www.npmjs.com/package/react-router В документах довольно очевидно, что 'response-router' не экспортирует функцию. Также посмотрите на 'var match = require ('response-router'); var RouterContext = require ('response-router'); '. Кажется, вы ожидаете 'require ('response-router')', чтобы вернуть другое значение, которое вы вызываете. Это не имеет смысла. 'require ('response-router')' всегда будет возвращать одно и то же значение. –

ответ

2

Вы назначая match к модулю react-router самого, который не является функцией и не то, что вы хотите сделать. match - часть модуля, а не сам модуль. То же самое касается RouterContext. То, что вы должны сделать, это:

var match = require("react-router").match; 
var RouterContext = require("react-router").RouterContext; 

Это требует правильного модуля и присваивает match правильно функции из модуля. То же самое делается для RouterContext. В качестве альтернативы, с новым назначением деструкции ES6 (эквивалентно):

var { match, RouterContext } = require("react-router"); 
+0

@joethemow Также обратите внимание, что назначение деструктурирования является чем-то новым в ES6. Ваша конфигурация может не поддерживать его. – Li357