Ошибка отправки неверного запроса из Nodejs — Необработанное сообщение, в заголовке отсутствует информация

#node.js #next.js #sendgrid #sendgrid-api-v3

Вопрос:

Я пытаюсь отправить электронное письмо с помощью nodejs на хосте vercel.

Я получаю неверный запрос с помощью API sendgrid/mail. Похоже, что он не создает информацию заголовка в запросе на отправку.

Когда я сбрасываю сообщение, это просто информация json, которую я отправляю.

Вот код, который я использую.

 const sgMail = require('@sendgrid/mail')  const SENDGRID_API_KEY = process.env.SENDGRID_API_KEY;  export default function (req, res) {   const mailData = {  from: 'dhook@fullonconsulting.com',  to: req.body.email,  subject: 'Message to Full On Consulting',  text: req.body.message,  html: 'lt;divgt;' req.body.message 'lt;/divgt;'  }  const {  classes: {  Mail,  },  } = require('@sendgrid/helpers');  const mail = Mail.create(mailData);  const body = mail.toJSON();  console.log("======================================== ");  console.log("RAW BODY: "   JSON.stringify(body));  console.log("======================================== ");   sendMail(mailData)  .then((result) =gt; {  console.log('Email sent...', result);  res.status(200).json({ status: 'SUCCESS' })  })  .catch((error) =gt; console.log('Error ... '   error.message)); }  async function sendMail(mailData) {  try {   var promise = new Promise( (resolve, reject) =gt; {   sgMail.setApiKey(SENDGRID_API_KEY)   const msg = {  to: mailData.to, // Change to your recipient  from: mailData.from, // Change to your verified sender  subject: mailData.subject,  text: mailData.text,  html: mailData.html,  }  console.log("API KEY: "   SENDGRID_API_KEY);  console.log(JSON.stringify(msg));   sgMail  .send(msg)  .then(() =gt; {  console.log('Email sent');  })  .catch((error) =gt; {  console.error(error);  console.log('RECEIVED ERROR')  })  });   //promise.then( result =gt; {  // console.log("PRomise Success ...");  //}, function(error) {  // console.log("Promise Failure...");  //});   } catch (error) {  console.log("CATCH ERROR: "   error)  return error;  } }  

Вот в чем ошибка

 ResponseError: Bad Request  at node_modules/@sendgrid/client/src/classes/client.js:146:29  at processTicksAndRejections (node:internal/process/task_queues:96:5) {  code: 400,  response: {  headers: {  server: 'nginx',  date: 'Sat, 30 Oct 2021 13:51:20 GMT',  'content-type': 'application/json',  'content-length': '219',  connection: 'close',  'access-control-allow-origin': 'https://sendgrid.api-docs.io',  'access-control-allow-methods': 'POST',  'access-control-allow-headers': 'Authorization, Content-Type, On-behalf-of, x-sg-elas-acl',  'access-control-max-age': '600',  'x-no-cors-reason': 'https://sendgrid.com/docs/Classroom/Basics/API/cors.html',  'strict-transport-security': 'max-age=600; includeSubDomains'  },  body: { errors: [Array] }  } }  

Комментарии:

1. Что вы получите, если console.log(error.response.body); окажетесь в своем catch квартале? Я вижу только то, что там написано errors: [Array] , но было бы наиболее полезно посмотреть, что находится в этом массиве.

Ответ №1:

Я неправильно передавал информацию из своей интерфейсной формы, что вызывало проблему.