Search code examples
javascriptobjective-cparse-platformparse-servermailgun

Nil return in Parse Cloud function


I am trying to implement a Parse cloud function that utilizes the Mailgun API validation method for an email address. I am obviously doing something wrong as when I call this method from objective-c I get nil back, but the cloud log (console.log) shows that the method is executing correctly - just not returning any value. I am pretty new to async/Promise thinking in Javascript so I am wondering if anyone can see where I go wrong here.

My cloud function implemmented in my node.js Parse Server is:

Parse.Cloud.define('validateEmail', async(request) => {

    var mailgun = require('mailgun.js');

    var mg = mailgun.client({
        username: 'api',
        key: process.env.MAILGUN_API_KEY,
        public_key: process.env.MAILGUN_PUBLIC_KEY
      });

    mg.validate.get(request.params.email, {useMasterKey: true}).then(data => {
        console.log(data);
        return Promise.resolve(JSON.stringify(data));
    })
    .catch(err => {
        console.log(err);
        return Promise.resolve(error);
    });
})

the cloud function is called from objective-c code as:

 [PFCloud callFunctionInBackground:@"validateEmail" withParameters:@{@"email":user.email} block:^(NSString *bodydata, NSError *error) {

                 NSDictionary *body = [NSJSONSerialization JSONObjectWithData:[bodydata dataUsingEncoding:NSUTF8StringEncoding] options:0 error:nil];

                NSLog(@"validateEmail : %@", body);
           }];

Solution

  • This was easily fixed once I figured out how to. Here is my working solution:

    Parse.Cloud.define('validateEmail',  async (request) => {
        var mailgun = require('mailgun.js');
    
        var mg = mailgun.client({
            username: 'api',
            key: process.env.MAILGUN_API_KEY,
            public_key: process.env.MAILGUN_PUBLIC_KEY
          });
    
       return mg.validate.get(request.params.email, true).then(data => {
           return data}) 
            .catch(err => handleParseError(err));
    })