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);
}];
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));
})