Как исправить ошибку "object object" на сайте node.js? - PullRequest
0 голосов
/ 28 марта 2019

Я создаю веб-сайт node.js для бизнеса и хотел бы иметь возможность уведомлять по электронной почте каждый раз, когда кто-то подает заявку. Я использую nodemailer и mailgun для отправки электронной почты каждый раз, когда подается заявка на работу. Сообщения электронной почты отправляются, однако они не содержат пар ключ-значение созданного мной объекта-кандидата. Любая помощь будет принята с благодарностью!

Вот изображение письма, которое я получаю при подаче заявления enter image description here

Вот код нодмейлера, который я использую

const nodemailer = require('nodemailer');
const mailgun = require('nodemailer-mailgun-transport');
const debug = require('debug')('app:mail');

const auth = {
    auth: {
       api_key: '**************',
       domain: '***************' 
    }
};

const transporter = nodemailer.createTransport(mailgun(auth));

function sendOrderEmail(applicant) {
  let html = '<ul>';

  Object.entries(applicant).forEach(([key, value]) => {
    html += `<li>${key}: ${value}</li>`;
  });

  html += '</ul>';

  const mailOptions = {
    from: '*************',
    to: '*********, *************',
    subject: '*****************',
    html
  };

  transporter.sendMail(mailOptions, (err, info) => {
    if (err) {
      debug(`Error: ${err}`);
    } else {
      debug(`Info: ${info}`);
    }
  });
}

module.exports = sendOrderEmail;

Вот мой почтовый маршрут, где я создаю объект заявителя

app.post('/employment', function(req, res){

    var firstName = req.body.firstName;
    var middleInitial = req.body.middleInitial;
    var lastName = req.body.lastName;
    var address = req.body.address;
    var city = req.body.city;
    var state = req.body.state;
    var zipCode = req.body.zipCode;
    var phoneNumber = req.body.phoneNumber;
    var doYouRecieveText = req.body.doYouRecieveText;

    var newApplicant = {
        firstName: firstName,
        middleInitial: middleInitial,
        lastName: lastName,
        address: address,
        city: city,
        state: state,
        zipCode: zipCode,
        phoneNumber: phoneNumber,
        doYouRecieveText: doYouRecieveText
    };

    Applicant.create(newApplicant, function(err, newlyCreated){
        if(err) {
            console.log(err);
        } else {
            console.log(newlyCreated);
            sendOrderEmail(newlyCreated);
            res.redirect('/');
        }
    });
});

Ответы [ 2 ]

1 голос
/ 28 марта 2019

Похоже, что value, который вы пытаетесь вставить в html, является объектом, но html ожидает значение типа String.

Попробуйте ввести в строку value, прежде чем вставлять его в HTML.

html += `<li>${key}: ${ typeof value === 'string' ? value : JSON.stringify(value)}</li>`;
0 голосов
/ 28 марта 2019

Я передавал параметр NewCreated в функцию sendOrderEmail, когда должен был проходить через переменную newApplicant

Applicant.create(newApplicant, function(err, newlyCreated){
    if(err) {
        console.log(err);
    } else {
        console.log(newlyCreated);
        sendOrderEmail(newApplicant);
        res.redirect('/');
    }
});
...