【问题标题】:React + Express + Nodemailer: Can't render components and Nodemailer togetherReact + Express + Nodemailer:不能一起渲染组件和 Nodemailer
【发布时间】:2017-07-28 08:10:37
【问题描述】:

我想用客户端路由渲染我的 React 应用程序,我想用 Nodemailer 发送邮件。由于 Nodemailer 不能在客户端使用,我必须在 Express 服务器上实现它。 这是服务器的样子:

express.js

router.use(express.static(path.resolve(__dirname, '..', 'build')))

router.get('*', (req, res) => {
res.sendFile(path.resolve(__dirname, '..', 'build/index.html'))
})

router.get('/sendmail', (req, res) => {
transporter.sendMail(options, (error, info) => {
      if (error){
        console.log(error)
      }
      console.log('Message was send!')
    })
})

1) 所以这会渲染 React 组件,但是当我路由到 '/sendmail' 时,会显示一个空白页面,index.html 会在没有 js 的情况下渲染,并且没有发送邮件。

2) 如果我删除第一行 router.use(express.static... 并路由到“/sendmail”,则会发送一封邮件,但我的应用程序不会呈现。

我还尝试了以下方法:

router.use(express.static(path.resolve(__dirname, '..', 'build')))

router.get('*', (req, res) => {
  console.log('path', req.path)

  if (req.path === '/sendmail') {
      transporter.sendMail(options, (error, info) => {
      if (error){
        console.log(error)
      }
      console.log('Message was send!')
    })
  } else {
    res.sendFile(path.resolve(__dirname, '..', 'build/index.html'))
  }
});

有什么解决办法吗?

【问题讨论】:

  • 你想在生产模式还是开发模式下这样做??

标签: javascript node.js reactjs express nodemailer


【解决方案1】:

只需要在express中改变路由的顺序,就会从上到下匹配:

router.use(express.static(path.resolve(__dirname, '..', 'build')))

router.get('/sendmail', (req, res) => {
// this will be processed when you send a GET for /sendmail to your express server
....
}

router.get('*', (req, res) => {
  res.sendFile(path.resolve(__dirname, '..', 'build/index.html'))
  // this will always match if the request is not /sendmail
})

【讨论】:

  • 已经试过了,还是不行。就像 express.static 获得控制权,而 router.get 被忽略。
猜你喜欢
  • 1970-01-01
  • 2020-07-12
  • 1970-01-01
  • 1970-01-01
  • 2021-08-06
  • 2020-02-16
  • 1970-01-01
  • 2019-07-14
  • 1970-01-01
相关资源
最近更新 更多