首页 > 解决方案 > 尝试运行 node-express 服务器来发送电子邮件并获得无限循环

问题描述

我正在尝试运行上述标题中的服务器,我似乎得到了一个无限循环,服务器每秒都在重新启动。请帮助并告诉我我做错了什么我是 node-express 的新手。

const express = require('express');
const app = express();
const router = express.Router();
const nodemailer = require('nodemailer');
const sendGridTransport = require('nodemailer-sendgrid-transport');
const { SENDGRID_API } = require('./config/keys');
// const PORT = process.env.PORT || 5000;
app.use(express.json());
const transporter = nodemailer.createTransport(
  sendGridTransport({
    auth: {
      api_key:
        'hidden',
    },
  })
);
const postMail = router.post('/send', (req, res) => {
  const { data, ingredients, price } = req.body;
  transporter
    .sendMail({
      to: 'hidden@hidden.com',
      from: 'hidden@hidden.com',
      subject: `הזמנה מ:${data.fullName}`,
      html: `<h3>שלום יש לך הזמנה חדשה !</h3>
<p>פרטי משלוח:</p>
<p>שם:${data.fullName}</p>
<p>עיר:${data.city}</p>
<p>רחוב:${data.street}</p>
<p>טלפון:${data.phone}
<br></br>
<p>פרטי הזמנה:</p>
<p>כמות בשר:${ingredients.meat}</p>
<p>כמות פסטרמה:${ingredients.pastrama}</p>
<p>כמות סלט:${ingredients.salad}</p>
<br></br>
<p>סה"כ לתשלום:${price}</p>
<p>צורת תשלום:${data.checkbox ? 'מזומן' : 'ביט'}`,
    })
    .then(resp => {
      res.json({ resp });
    })
    .catch(err => {
      console.log(err);
    });
});

app.use(postMail);
app.listen(3001);

标签: node.jsexpress

解决方案


似乎 expressjs 框架没有正确处理错误

尝试


const postMail = router.post('/send', (req, res, next) => { // add `next` here!
  const { data, ingredients, price } = req.body;
  return transporter
    .sendMail({
      to: 'hidden@hidden.com',
      from: 'hidden@hidden.com',
      subject: `הזמנה מ:${data.fullName}`,
      html: `<h3>שלום יש לך הזמנה חדשה !</h3>
<p>פרטי משלוח:</p>
<p>שם:${data.fullName}</p>
<p>עיר:${data.city}</p>
<p>רחוב:${data.street}</p>
<p>טלפון:${data.phone}
<br></br>
<p>פרטי הזמנה:</p>
<p>כמות בשר:${ingredients.meat}</p>
<p>כמות פסטרמה:${ingredients.pastrama}</p>
<p>כמות סלט:${ingredients.salad}</p>
<br></br>
<p>סה"כ לתשלום:${price}</p>
<p>צורת תשלום:${data.checkbox ? 'מזומן' : 'ביט'}`,
    })
    .then(resp => {
      res.json({ resp });
    })
    .catch(next); // change from console.error HERE !!!
});

请参阅https://expressjs.com/en/guide/error-handling.html


推荐阅读