Express对接Mailchimp出现JSON意外结束语法错误求排查
解决Mailchimp订阅功能的JSON解析错误问题
我跟着Angela Yu的课程编写了一段实现用户订阅Mailchimp功能的Express代码,运行时出现「Syntax error: unexpected end of JSON input」错误。尝试添加逗号等操作仍无法解决,恳请提供帮助与调试建议。
代码如下:
const express = require("express"); const bodyp = require("body-parser"); const request = require("request"); const https = require("https"); const app = express(); app.use(express.static("public")); app.use(bodyp.urlencoded({ extended: true })); app.get("/", function(req, res){ res.sendFile(__dirname + "/signup.html"); }); app.post("/", function(req, res){ const finame = req.body.fname; const laname = req.body.lname; const mail = req.body.email; const data = { members: [ { email_address: mail, status: "subscribed", merge_fields: { FNAME: finame, LNAME: laname }, }, ], }; const jsondata = JSON.stringify(data); const url = "https://us21.api.mailchimp.com/3.0/lists/d07ffaae94"; const options = { method:"post", auth:"XXXXXXXXXXX" }; const request = https.request(url, options, function(response){ if(response.statusCode === 200){ res.sendFile(__dirname + "/success.html"); } else{ res.sendFile(__dirname + "/failure.html"); } response.on("data", function(data){ console.log(JSON.parse(data)); }); }); request.write(jsondata); request.end(); }); app.post("/failure", function(req, res){ res.redirect("/"); }); app.listen(3000, function(){ console.log("Server is running on port 3000."); });
调试建议及解决方法
- 清理JSON冗余逗号:JS允许对象/数组末尾加逗号,但转换成JSON后可能触发解析错误。修改
data对象,去掉所有多余的尾逗号:const data = { members: [ { email_address: mail, status: "subscribed", merge_fields: { FNAME: finame, LNAME: laname } } ] }; - 正确拼接响应数据:
response.on("data")会分次返回响应内容,单次解析会得到不完整的JSON。改成先拼接所有数据再解析:let responseData = ""; response.on("data", function(chunk){ responseData += chunk; }); response.on("end", function(){ if(responseData){ try { console.log(JSON.parse(responseData)); } catch (err) { console.error("JSON解析失败:", err); } } }); - 修正认证格式:Mailchimp的
auth字段需要遵循"任意用户名:API密钥"的格式,比如"user123:your-mailchimp-api-key",检查你的auth值是否符合要求。 - 添加请求头:发送JSON数据时必须指定
Content-Type,在options中补充:const options = { method: "post", auth: "yourUsername:yourApiKey", headers: { "Content-Type": "application/json" } }; - 验证API端点信息:确认URL中的服务器编号(us21)和列表ID(d07ffaae94)与Mailchimp后台完全一致,错误的列表ID会返回异常响应,导致JSON解析失败。
内容的提问来源于stack exchange,提问作者Amna Iftikhar
相关产品推荐
相关产品推荐

