[英]Send route not being found,
我正在尝试使用 nodemailer 从联系页面发送 email。 我用 MERN 堆栈构建了站点。 所有其他路线都可以正常工作。 我可以设置一个新用户,写一篇文章并登录一个现有用户。 路由中断的唯一部分是在联系页面上发送邮件时。
下面是中间件:
const app = express();
// Connect Database
connectDB();
// Init Middleware
app.use(express.json());
// Define Routes
app.use('/api/users', require('./routes/api/users'));
app.use('/api/auth', require('./routes/api/auth'));
app.use('/api/profile', require('./routes/api/profile'));
app.use('/api/posts', require('./routes/api/posts'));
app.use('/api/send', require('./routes/api/send'));
以下是发送路线:
var express = require('express');
var config = require('config');
var router = express.Router();
var nodemailer = require('nodemailer');
var cors = require('cors');
// @route POST api/send
// @desc Send email on contact page
// @access Public
router.post('/send',(req, res ) => {
var name = req.body.name
var email = req.body.email
var subject = req.body.subject
var message = req.body.message
var content = `
name: ${name} \n
email: ${email} \n
subject: ${subject} \n
message: ${message} `
var mail = {
from: name,
to: receiver, // receiver email,
subject: subject,
text: content
}
transporter.sendMail(mail, (err, data) => {
if (err) {
res.json({
status: 'fail'
})
} else {
res.json({
status: 'success'
})
}
})
});
module.exports = router;
我在联系页面上提交表单时收到 404 错误。 下面是联系页面:
const ContactForm = () => {
const [state, setState] = useState({
name: '',
email: '',
subject: '',
message: ''
});
const [result, setResult] = useState(null);
const sendEmail = event => {
event.preventDefault();
axios
.post('/send', { ...state })
.then(response => {
setResult(response.data);
setState({
name: '',
email: '',
subject: '',
message: ''
});
})
.catch(() => {
setResult({
success: false,
message: 'Something went wrong. Try again later'
});
});
};
const onInputChange = event => {
const { name, value } = event.target;
setState({
...state,
[name]: value
});
};
这是我的处理程序:
const nodemailer = require ('nodemailer');
nodemailer.createTransport({
host: "smtp.gmail.com", //replace with your email provider
port: 587,
auth: {
user: process.env.email,
pass: process.env.password
}
});
// verify connection configuration
transporter.verify(function(error, success) {
if (error) {
console.log("error at mail send");
} else {
console.log("Server is ready to take the messages");
}
});
module.exports = transporter
为了调试,我尝试将 POST 路由更改为(req, res, next)
(req, res, send)
看来您缺少转运器 object。您需要使用nodemailer.createTranspot
创建它
const transpoter = nodemailer.createTranspot({
service: 'gmail',
auth: {
user: 'sender@gmail.com',
pass: 'password'
}
})
然后尝试一下。
这已通过以下方式解决:
将transporter
器移动到send route
服务器正在使用的路由是api/send/send
在POST route
上它应该是/
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.