2017-02-20 21 views
1

У меня проблема с реакцией SSR. Я использую agent-маршрутизатор в качестве менеджера маршрутов приложений.Как реагировать на серверный рендеринг на RESTful API (реакция-маршрутизатор + экспресс)?

В стороне сервера, он может выглядеть следующим образом (server.js):

var app = express(); 
app.get("*",function(req, res){ 
    match({routes:AppRoutes, location:req.url}, 

     function(err, redirectLocation, renderProps){ 
     if (error) { 
      res.send(500, error.message) 
     } else if (redirectLocation) { 
      res.redirect(302, redirectLocation.pathname + redirectLocation.search) 
     } else if (renderProps) { 
      res.send(200, renderToString(<RoutingContext {...renderProps} />)) 
     } else { 
      res.send(404, 'Not found') 
     } 
    }); 
}); 

В случае реакции-маршрутизатор потребляет все GET маршруты, если мне нужно RESTful API на стороне сервера, как я отделить его от реактивного маршрута?

И если у меня есть компонент в интерфейсе:

class Post extends Component{ 
    componentDidMount(){ 
     fetch('/api/post') 
     .then(function(response){ 
       //change component state or do other 
     }) 
     .catch(function(err){ 
      //handle error 
     }) 
    } 
    render(){ 
     // 
    } 
} 

Как этот компонент связи с сервером с помощью RESTful API?
Может ли Express предоставить такую ​​структуру API RESTful?

app.get("/api/post",function(){ 
    //do something and response 
}); 

Я действительно не понимаю.

ответ

2

В: «В случае, если« реактивный маршрутизатор »потребляет все маршруты GET, если мне нужен RESTful API на стороне сервера, как его отделить от маршрута реакции?»

A: Вы можете слушать API вызовов с кодом Вы писали:

app.get("/api/post",function(){ 
    //do something and response 
}); 

Но вы должны положить его выше вашего другого кода, который прослушивает "*".

Вопрос: Как этот компонент взаимодействует с сервером RESTful API? "

A: Ваши компоненты не будут выполнять вызов Ajax при рендеринге на сервере. Функция componentDidMount не будет вызываться на стороне сервера.

+0

Большое спасибо за решение моего вопроса! В этот день я узнал о реакции маршрутизатора и запутался в рендеринге на стороне сервера. Я даже пытался использовать Regex для соответствия маршрутам (ужасный путь!). Я попробовал этот ответ только сейчас, и он работает! – Betamee