React + Express + Nodemailer:无法将组件和Nodemailer一起呈现

时间:2017-07-28 08:10:37

标签: javascript node.js reactjs express nodemailer

我想用客户端路由渲染我的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'))
  }
});

任何解决方案?

1 个答案:

答案 0 :(得分:0)

只需更改快递中的路线顺序,它们将从上到下进行匹配:

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
})