javascript - 使用react-router获取服务器端数据

标签 javascript express reactjs ecmascript-6 react-router

我正在我的 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/

相关文章:

javascript - jQuery 数组填充 mailto 链接添加逗号

javascript - 当我点击两次时,css3 转换不起作用

reactjs - 在github上安装env-cmd

reactjs - FirebaseUI - 在创建用户之前验证显示名称

javascript - 尝试了解 jwt 身份验证流程

express - node-express app.get() 在 webstorm 中标记为未解决

javascript - Express session 内部回调返回未定义外部

mysql - 如何将mysql数据渲染到jade文件?

reactjs - 从 formik 向状态传递值

Javascript:var = var = 函数