Home > Software engineering >  API resolved without sending a response for /api/campaign/dynamicid, this may result in stalled requ
API resolved without sending a response for /api/campaign/dynamicid, this may result in stalled requ

Time:10-24

I am getting an error while running amazon ses code in next js. don't know where am wrong, please try to fix my error. If you have any question please free feel to ask.

sendmail.js

This is the sendmail.js file where i got error. here I am using amazon ses for sending mail.

var AWS = require('aws-sdk');

AWS.config.update({ region: process.env.AWS_REGION });

// var mail = '';

function sendMail(Email) {

    var result;
    // Create sendEmail params 
    var params = {
        Destination: { /* required */
            CcAddresses: [
                Email,
                /* more items */
            ],
            ToAddresses: [
                Email,
                /* more items */
            ]
        },
        Message: { /* required */
            Body: { /* required */
                Html: {
                    Charset: "UTF-8",
                    Data: "HTML_FORMAT_BODY"
                },
                Text: {
                    Charset: "UTF-8",
                    Data: "TEXT_FORMAT_BODY"
                }
            },
            Subject: {
                Charset: 'UTF-8',
                Data: 'Test email'
            }
        },
        Source: '[email protected]', /* required */
        ReplyToAddresses: [
            '[email protected]',
            /* more items */
        ],
    };

    // Create the promise and SES service object
    var sendPromise = new AWS.SES({ apiVersion: '2010-12-01' }).sendEmail(params).promise();

    // Handle promise's fulfilled/rejected states
    sendPromise.then(
        function (data) {
            result = 'Success';
        }).catch(
            function (err) {
                result = 'Failed';
            });
}

export default sendMail;

dynamicid.js

This is the dynamic id .js file where i wrote my endpoint code

import { getDataFromSheets } from '../../../libs/sheets';
import sendmail from '../../../libs/ses/sendmail';

export default function handler(req, res) {
  var data;
  getDataFromSheets()
    .then(sheet => {
      data = sheet.length
      for (var i = 1; i < data; i  ) {
        sendmail(sheet[i].Email)
      }
    })
    .catch(err => console.log(err))

}

CodePudding user response:

Each endpoint function must end the request-response cycle by sending a response ( res.send(), res.json(), res.end(), etc). So the solution would be:

export default function handler(req, res) {
  var data;
  getDataFromSheets()
    .then(sheet => {
      data = sheet.length
      for (var i = 1; i < data; i  ) {
        sendmail(sheet[i].Email)
      }
      res.json({status: 'success', message: 'email has been sent'})
    })
    .catch(err => {
      console.log(err)
      res.json({status: 'fail', error: err})
    })
}
  • Related