【发布时间】:2021-08-29 08:54:13
【问题描述】:
相对较新的节点。我正在构建一个基本的应用程序,通过使用MailChimp's API 将用户注册到电子邮件通讯。要在我的 Mailchimp 帐户上订阅用户,我有以下 POST 路由 uses their Node library。
/*** POST route endpoint ***/
app.post("/", (req, res) => {
console.log("Serving a POST request at root route.");
// Define data member based on parameters of req
// and global constants.
const member = {
email_address: req.body.email,
email_type: EMAIL_TYPE,
status: SUBSCRIPTION_STATUS,
language: LANGUAGE,
vip: VIP,
merge_fields: {
FNAME: req.body.firstName,
LNAME: req.body.lastName
}
};
mailchimpClient.setConfig({
apiKey: MAILCHIMP_API_KEY,
server: SERVER,
});
// Define async function that makes a call to the mailchimp batch POST lists/{list_id} endpoint.
const postIt = async () => {
const response = await mailchimpClient.lists.batchListMembers(MAILCHIMP_LIST_ID, {
members: [member],
update_existing: false
});
console.log(JSON.stringify(response)); // Want to read some output in terminal
};
// Call the async function you defined
postIt()
.then(()=>res.send("<h1>All good, thanks!</h1>"))
.catch(()=>res.send("<h1>Error!</h1>"));
});
为了测试代码是否正确响应错误,我添加了以下虚构用户两次:
第一次,服务器和终端上的一切都按预期成功。服务器:
和终端输出:
当用户自己看到<h1>,上面写着“一切都好,谢谢!”:
但是我第二次输入 Jane Doe 的信息,而 Mailchimp 显然确实给了我预期的错误(因为 update_existing 在 postIt() 的定义中是 false),我在 catch() 中的失败回调是 未调用,用户仍会在浏览器中看到成功消息!
所以我们这里有一个旨在失败的 POST 调用,但似乎我可能没有很好地使用 postIt() 返回的 Promise。关于我做错了什么有什么想法吗?
【问题讨论】:
标签: node.js express error-handling promise mailchimp-api-v3.0