javascript - Nodemailer 无法在路由文件夹中工作

标签 javascript node.js express nodemailer

我遇到一个问题,如果我从定义了 Express 服务器的 app.js 调用我的订阅表单,它就可以完美工作,但如果我将 subscribe.js 移动到路由文件夹,我就无法发送邮件。我连接了两个文件,但仍然不起作用。当我按下发送按钮时,它给出错误“Not Found”(localhost:3000/send)

这是我的 app.js 代码

var createError = require('http-errors');
var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');
var logger = require('morgan');
var ejs = require('ejs');

var indexRouter = require('./routes/index');
var subscribeRouter = require('./routes/subscribe');

var app = express();

// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');

app.use(express.static(path.join(__dirname, 'public')));

app.use('/', indexRouter);
app.use('/subscribe', subscribeRouter);

module.exports = app;

和我的 subscribe.js 代码

var express = require('express');
var bodyParser = require('body-parser');
var nodemailer = require('nodemailer');

var router = express.Router();

/* GET Subscribe Page. */
  router.get('/', (req, res) => {
  res.render('subscribe');
});

// Body Parser Middleware
router.use(bodyParser.urlencoded({ extended: false }));
router.use(bodyParser.json());

router.post('/send', (req, res) => {
  const output = `
    <p>....</p>
    <h3>...</h3>
    <ul>  
        <li>E-naslov: ${req.body.email}</li>
    </ul>
  `;

// create reusable transporter object using the default SMTP transport
  let transporter = nodemailer.createTransport({
    host: '...'
    port: 465,
    secure: true, // true for 465, false for other ports
    auth: {
        user: 'example@example.com', // generated ethereal user
        pass: 'xxxxxxxx'  // generated ethereal password
    },
    tls:{
      rejectUnauthorized:false
    }
  });

// setup email data with unicode symbols
  let mailOptions = {
      from: '"blabla"<info@blabla.com>', // sender address
      to: 'example@gmail.com', // list of receivers
      subject: 'Novo naročilo na e-novice', // Subject line
      text: 'Hello world?', // plain text body
      html: output // html body
  };

// send mail with defined transport object
  transporter.sendMail(mailOptions, (error, info) => {
      if (error) {
          return console.log(error);
      }
      console.log('Message sent: %s', info.messageId);   
      console.log('Preview URL: %s', nodemailer.getTestMessageUrl(info));

      res.render('subscribe', {msg:'Email has been sent'});
  });
});

module.exports = router;

在我的 subscribe.ejs 中,我的表单有 action=/send 和 method=post

最佳答案

我认为你的路线实际上是/订阅/发送

当您在索引中使用订阅路由器时,您将其映射到/subscribe,并且在该路由器中/send 是相对的。

关于javascript - Nodemailer 无法在路由文件夹中工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50533839/

相关文章:

javascript - Backbone.js 模型未传递给 View

javascript - 如何使用变量调用 JavaScript 函数

javascript - Elasticsearch Javascript客户端更新不起作用

node.js - faye-websocket-node 作为客户端和 sockjs-node 作为服务器的问题

javascript - mongoose 检查 id 是否存在,但该 id 嵌套在数组中

JavaScript 字符串编码/解码

javascript - textarea onchange 不在 php 脚本中触发

javascript - 为什么使用discord.js 踢人不起作用

javascript - 在不正确的路线上收到错误消息

node.js - 使用express初始化ws服务器