/
signup.js
77 lines (64 loc) · 2.23 KB
/
signup.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
const request = require("request");
const mailChimpAPI = process.env.MAILCHIMP_API_KEY;
const mailChimpListID = process.env.MAILCHIMP_LIST_ID;
const mcRegion = process.env.MAILCHIMP_REGION;
module.exports.handler = (event, context, callback) => {
const formData = JSON.parse(event.body);
const email = formData.email;
let errorMessage = null;
if (!formData) {
errorMessage = "No form data supplied";
console.log(errorMessage);
callback(errorMessage);
}
if (!email) {
errorMessage = "No EMAIL supplied";
console.log(errorMessage);
callback(errorMessage);
}
if (!mailChimpListID) {
errorMessage = "No LIST_ID supplied";
console.log(errorMessage);
callback(errorMessage);
}
const data = {
email_address: email,
status: "subscribed",
merge_fields: {}
};
const subscriber = JSON.stringify(data);
console.log("Sending data to mailchimp", subscriber);
request({
method: "POST",
url: `https://${mcRegion}.api.mailchimp.com/3.0/lists/${mailChimpListID}/members`,
body: subscriber,
headers: {
"Authorization": `apikey ${mailChimpAPI}`,
"Content-Type": "application/json"
}
}, (error, response, body) => {
if (error) {
callback(error, null)
}
const bodyObj = JSON.parse(body);
console.log("Mailchimp body: " + JSON.stringify(bodyObj));
console.log("Status Code: " + response.statusCode);
if (response.statusCode < 300 || (bodyObj.status === 400 && bodyObj.title === "Member Exists")) {
console.log("Added to list in Mailchimp subscriber list");
callback(null, {
statusCode: 201,
headers: {
"Content-Type": "application/json",
"Access-Control-Allow-Origin": "*",
"Access-Control-Allow-Credentials": "true"
},
body: JSON.stringify({
status: "saved email"
})
})
} else {
console.log("Error from mailchimp", bodyObj.detail);
callback(bodyObj.detail, null);
}
});
};