繁体   English   中英

找不到发送路线,

[英]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/sendPOST route上它应该是/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM