【问题标题】:How do I get result from another module - Nodejs如何从另一个模块获取结果 - Nodejs
【发布时间】:2020-02-05 10:22:25
【问题描述】:

您好,我需要这方面的帮助。我正在尝试发送电子邮件并等待响应,然后将其作为 json 响应返回给用户。我现在拥有的代码没有返回任何内容我也尝试过添加超时以查看异步等待是否可以解决它,但它不起作用。

mailer.js 

"use strict";
const nodemailer = require("nodemailer");

module.exports = async (email, password, name) => {
  let testAccount = await nodemailer.createTestAccount();

  let transporter = nodemailer.createTransport({
    host: "smtp.ethereal.email",
    port: 587,
    secure: false,
    auth: {
      user: testAccount.user,
      pass: testAccount.pass
    }
  });

  let info = await transporter.sendMail({
    from: '"Example user" <example.uesr@retrofit.io>',
    to: email,
    subject: "Testing all yh?",
    text: "Hello world",
    html: "<b>Hello world?</b>"
  });

  return nodemailer.getTestMessageUrl(info);
};

这是我的用户注册码

auth.js

const express = require("express");
const router = express.Router();
const User = require("../models/User");
const neutral_mailer = require("../utils/neutral-mailler");

router.post("/create", async (req, res) => {
  const user = new User({
    first_name: "Umar",
    last_name: "Alli",
    company: "Belirs",
    email: "umar@belirs.com",
    password: "Test",
    status: "active",
    date: Date.now()
  });

  try {
    await user.save(err => {
      if (err) {
        res.json({ message: err });
      }

      const link = neutral_mailer(user.email, user.password, user.first_name);
      res.status(201).send(link);
    });
  } catch (err) {
    res.json({ message: err });
  }
});```

【问题讨论】:

  • 如果你在transporter.sendMail 之后对info 执行console.log,它看起来如何?
  • 您正在混合异步等待和回调,您可以尝试删除异步等待吗?或者只使用回调。
  • 返回null还是不返回?
  • @HoratiuJeflea 它返回预期的数据
  • @yeya 它返回 null

标签: node.js


【解决方案1】:

试试这个。

transport.sendMail(options).then(function(info){
    console.log(info);
}).catch(function(err){
    console.log(err);
});

或 您可以点击此链接。 https://github.com/nodemailer/nodemailer/issues/294

或 这个。 Nodemailer email confirmation using Async/Await

【讨论】:

    【解决方案2】:

    transporter.sendMail 不返回Promise,而是将回调作为参数

    const sendMail = () => async (email, password, name) => {
        let testAccount = await nodemailer.createTestAccount();
    
        let transporter = nodemailer.createTransport({
            host: "smtp.ethereal.email",
            port: 587,
            secure: false,
            auth: {
                user: testAccount.user,
                pass: testAccount.pass
            }
        });
    
        const message = {
            from: '"Example user" <example.uesr@retrofit.io>',
            to: email,
            subject: "Testing all yh?",
            text: "Hello world",
            html: "<b>Hello world?</b>"
        };
    
        return await sendMailInternal();
    };
    
    const sendMailInternal = (message) => new Promise(resolve => {
        transporter.sendMail(message, (err, info) => {
            if (err) {
                //handle error
            }
    
            resolve(nodemailer.getTestMessageUrl(info));
        });
    });
    
    module.exports = sendMail;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-09-30
      • 1970-01-01
      • 2015-02-12
      • 2015-05-09
      • 2020-11-24
      • 2018-05-15
      • 1970-01-01
      • 2012-12-18
      相关资源
      最近更新 更多