我正在我的 Express 应用程序中的服务器上渲染我的 React-router。 这是我的代码
app.use((req, res) => {
match({ routes, location: req.url }, (error, redirectLocation, renderProps) => {
console.log(renderProps)
if (error) {
res.status(500).send(error.message)
} else if (redirectLocation) {
res.redirect(302, redirectLocation.pathname + redirectLocation.search)
} else if (renderProps) {
let component = renderToString(<RoutingContext {...renderProps}/>);
var html = renderToStaticMarkup(body(null,
div({id: 'content', dangerouslySetInnerHTML: {__html:component}}),
script({src: '/js/main.js'})
))
res.end(html)
} else {
res.status(404).send('Not found')
}
})
});
并且它有效。我可以在不刷新的情况下进行路由。 但是我如何在渲染组件之前引用我的快速路由来查询我的数据库(不是ajax查询)..
最佳答案
您可以查询数据库并使用回调来捕获响应网络请求所需的变量,例如资源
。
或者,您可以使用生成器从数据库中生成
结果。
您的解决方案对于您使用的数据库和库非常重要。
这是一个例子:
const mysql = require('mysql');
let connection = mysql.createConnection({ ... });
// ...
app.use((req, res) => {
match({ routes, location: req.url}, (error, redirectLocation, renderProps) => {
if (error) res.status(500).send(error.message);
else if (redirectLocation) res.redirect(302, redirectLocation.pathname + redirectLocation.search);
else if (renderProps) {
connection.query('SELECT 2 + 2 AS sample', (err, rows, fields) => {
if (err) res.status(500).send(err);
else {
let fromDatabase = rows[0].sample;
let component = renderToString(<RoutingContext {...renderProps} />);
let html = renderToStaticMarkup(body(
null,
div({ id: 'content', dangerouslySetInnerHTML: { __html: component } }),
script({ src: '/js/main.js' })
));
res.end(html);
}
});
} else {
res.status(404).send('Not found');
}
});
});
// ...
关于javascript - 使用react-router获取服务器端数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35384978/