首页 > 解决方案 > 将 mailgun 合并到控制器中

问题描述

我一直在尝试使用mailgun。Node.js 响应一个获取请求,当我将它从我的routes文件中移出并进入控制器函数时,我知道我遗漏了一些东西。当我提出请求时它工作正常

const mailgun = require('mailgun.js');
const router = express.Router();

router.get('/', (req, res) => {
   const API_KEY = 'secret';
   const DOMAIN = 'secretdomain';
   const mg= mailgun({ apiKey: API_KEY, domain: DOMAIN });
   const data = {
     from: 'bob@thebuilder.com',
     to: 'barney@rubble.com',
     subject: 'Whats up doc',
     template: "reqfeedback",
   };
   mg.messages().send(data, function (error, body) {
    if (error) {
        console.log(error);
    }
    console.log(body);
   }); 
});

但是当我尝试将它作为一个函数添加到我的控制器文件中时,我得到一个未处理的 Promise TypeError 说mailgun is not a function 所以我确保它像这样包装在一个 try/catch 中......

controller.js

const mongoose = require('mongoose');
const mailgun = require('mailgun.js');

const sendEmail = async(req,res,next) => {
   try{
      const API_KEY = 'secret';
      const DOMAIN = 'secretdomain';
      const mg= mailgun({ apiKey: API_KEY, domain: DOMAIN });
      const data = {
          from: 'bob@thebuilder.com',
          to: 'barney@rubble.com',
          subject: 'Whats up doc',
          template: "reqfeedback",
      };
      await mg.messages().send(data, function (error, body) {
          if (error) {
            console.log(error);
       }
          console.log(body);
       });
  catch (err) {
    const error = new HttpError(
        'Something went wrong, could not send email.',
        500
    );
    return next(error);
    }
    res.status(200).json({ message: 'email sent' });
};

exports.sendEmail = sendEmail;

我添加了这条路线: routes.js

const controllers = require('../controllers/controllers');
const router = express.Router();
const express = require('express');

router.get('/sendEmail', controllers.sendEmail);

module.exports = router;

但是当我发送获取请求时,我不断收到 500 错误“消息”:“出了点问题,无法请求反馈。”

哈尔普请。

标签: javascriptnode.jsexpressmailgun

解决方案


推荐阅读