Javascript 反应+;Express+;Nodemailer:Can';t将组件和节点生成器一起渲染
我希望使用客户端路由呈现我的React应用程序,并希望使用NodeEmailer发送邮件。因为nodeEmailer不能在客户端使用,所以我必须在Express服务器上实现它。 这就是服务器的外观: express.jsJavascript 反应+;Express+;Nodemailer:Can';t将组件和节点生成器一起渲染,javascript,node.js,reactjs,express,nodemailer,Javascript,Node.js,Reactjs,Express,Nodemailer,我希望使用客户端路由呈现我的React应用程序,并希望使用NodeEmailer发送邮件。因为nodeEmailer不能在客户端使用,所以我必须在Express服务器上实现它。 这就是服务器的外观: express.js router.use(express.static(path.resolve(__dirname, '..', 'build'))) router.get('*', (req, res) => { res.sendFile(path.resolve(__dirname,
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'))
}
});
任何解决方案?只需更改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被忽略一样。您想在生产或开发模式下执行此操作吗??