Good Morning, I am trying to get user information from a signup form that is posting to my Mongo Database to then sign a user up to Mailchimp. The code I current am working with is:
require("dotenv").config();
const express = require("express"),
expressSanitizer= require("express-sanitizer"),
router = express.Router(),
passport = require("passport"),
User = require("../models/user"),
middleware = require("../middleware"),
superagent = require('superagent'),
mailchimp = require('@mailchimp/mailchimp_marketing'),
request = require('request'),
https = require('https');
//REGISTER USER
router.post("/register", function (req, res){
var newUser = {
firstName: req.sanitize(req.body.firstName),
lastName: req.sanitize(req.body.lastName),
email: req.sanitize(req.body.email),
username: req.sanitize(req.body.username)
};
User.register(newUser, req.body.password, function(err,user){
if(err){
// DISPLAYS PASSPORT ERROR
console.log(err);
return res.render("/login");
}
passport.authenticate("local")(req, res, function(){
console.log(user);
res.redirect("/insider/resources");
});
});
// Mailchimp Logic
const firstName = req.sanitize(req.body.firstName);
const lastName = req.sanitize(req.body.lastName);
const email = req.sanitize(req.body.email);
var data = {
members:[ {
email_address: email,
status: "subscribed",
merge_fields: {
FNAME: firstName,
LNAME: lastName
}
}]
};
var jsondata = JSON.stringify(data);
const url = `https://us3.api.mailchimp.com/3.0/lists/`+process.env.MAILCHIMPLIST;
const options = {
method: "POST",
body: data,
auth: process.env.MAILCHIMP
};
const request = https.request(url, options, function(response){
response.on("data", function (data) {
console.log(JSON.parse(data));
});
if(response.statusCode === 200){
res.render("/insider/resources");
} else {
res.render("landing");
}
});
request.write(jsondata);
request.end();
});
In this example process.env.MAILCHIMP is my stored API, process.env.MAILCHIMPLIST is the audience I want to drop the users into.
A This point I know the user is registered because my console.log() shows the user registered in Mongo. After this I get this error from Mailchimp's API:
{
type: 'https://mailchimp.com/developer/marketing/docs/errors/',
title: 'API Key Invalid',
status: 401,
detail: "Your API key may be invalid, or you've attempted to access the wrong datacenter.",
instance: '40471ba2-403c-9846-ef76-f3cb6b39087f'
}
If anyone could help me find where I am making a mistake I would greatly appreciate it.
I realized after looking at my code I did not have two dependencies installed, thank you to anyone who tried to help, but the exact code to make this work is:
// REQUIREMENTS
require("dotenv").config();
const express = require("express"),
expressSanitizer= require("express-sanitizer"),
router = express.Router(),
passport = require("passport"),
User = require("../models/user"),
mailchimp = require('@mailchimp/mailchimp_marketing'),
request = require('request'),
https = require('https');
// Mailchimp Logic in your route
let firstName = req.sanitize(req.body.firstName);
let lastName = req.sanitize(req.body.lastName);
let email = req.sanitize(req.body.email);
var data = {
members:[ {
email_address: email,
status: "subscribed",
merge_fields: {
FNAME: firstName,
LNAME: lastName
}
}]
};
var jsonData = JSON.stringify(data);
const url = 'https://us3.api.mailchimp.com/3.0/lists/'+process.env.MAILCHIMPLIST;
const options = {
method: "POST",
auth: "archit:"+process.env.MAILCHIMPAPI,
};
const request = https.request(url, options, (response) => {
response.on("data", (data) => {
console.log(JSON.parse(data));
});
});
request.write(jsonData);
request.end();
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.