我想用客户端路由渲染我的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'))
}
});
任何解决方案?
答案 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
})