2016-03-09 1 views
0

Итак, у меня есть node.js + реагировать и реагировать-маршрутизатор, и я хочу сгенерировать маршруты из списка, взятого из базы данных. Как я могу сделать что-то вроде этогоКак получить список маршрутов response.js из базы данных?

<Route component={App}> 
    <Route name="Home" path="/" component={Page}/> 
    <Route name="Page1" path="/page1" component={Page}/> 
    <Route name="Page2" path="/page2" component={Page}/> 
    ... 
</Route> 

и использовать его в моей заявке? Мои текущие файлы выглядеть следующим образом:

server.js

var express = require('express'); 
var bodyParser = require('body-parser'); 
... 
var routes = require('./app/routes'); 
... 
app.use(function(req, res) { 
    Router.match({ routes: routes.default, location: req.url }, function(err, redirectLocation, renderProps) { 
    if (err) { 
     res.status(500).send(err.message) 
    } else if (redirectLocation) { 
     res.status(302).redirect(redirectLocation.pathname + redirectLocation.search) 
    } else if (renderProps) { 
     var html = ReactDOM.renderToString(React.createElement(Router.RoutingContext, renderProps)); 
     //var page = swig.renderFile('views/index.html', { html: html }); 
     res.status(200).send('<!DOCTYPE html><html lang="ro"><head><link rel="stylesheet" href="./foundation-6/css/foundation.min.css"><link rel="stylesheet" href="./css/main.css"></head><body><div id="app"></div><script src="/socket.io/socket.io.js"></script></script><script src="./js/vendor.js"></script><script src="./js/vendor.bundle.js"></script><script src="./js/bundle.js"></script><script src="./foundation-6/js/foundation.min.js"></script><script>$(document).foundation();var socket = io();</script></body></html>'); 
    } else { 
     res.status(404).send('Page Not Found') 
    } 
    }); 
}); 

routes.js

import React from 'react'; 
import {Route} from 'react-router'; 
import App from './components/App'; 
import Page from './components/Page'; 

export default (
    <Route component={App}> 
    <Route name="Home" path="/" component={Page}/> 
    <Route name="Test" path="/test" component={Page}/> 
    </Route> 
); 

Редактировать

Я просто хочу, чтобы получить список страниц. Все страницы будут использовать один и тот же компонент, но у них будет другой заголовок и контент. Я могу запросить базу данных, но я не знаю, как горячо передавать объект на responsejs и генерировать маршруты на основе этого.

+1

Первый вопрос: почему вы пытаетесь сохранить это в базе данных? Вы пытаетесь сохранить только маршруты там (почему?), Или вы также пытаетесь сохранить компоненты там? Кроме того, с чем вы столкнулись? Запрос базы данных? Итерирование по набору записей? Возможно, попробуйте разбить задачи, чтобы сделать это на мелкие кусочки и попытаться решить их индивидуально. –

+0

Нет. Я просто хочу получить список страниц. Как я сказал в примере, все они будут использовать один и тот же компонент, но у них будет другой заголовок и контент. Я могу запросить базу данных, но я не знаю, как горячо передавать объект на responsejs и генерировать маршруты на основе этого. –

+0

Вы можете попробовать использовать простые объекты, как указано в нижней части страницы. Тогда проблема сводится к преобразованию вывода базы данных в простой объект js: https://github.com/reactjs/react-router/blob/master/docs/guides/RouteConfiguration.md#user-content-configuration-with -plain-маршруты –

ответ

0

Предполагая, что вы можете получить данные, необходимые как массив в коде, вы могли бы сделать что-то вроде этого:

// assuming data is like [{path:'/', name:'Home'}, {path: '/page1', name: 'Page 1'}, ...] 

<Route component={App}> 
    {data.map((obj, i) => { <Route name={obj.name} path={obj.path} component={Page}/> } 
</Route> 
Смежные вопросы