尝试将成员添加到列表中,但我不断收到此错误:无法验证提交的资源。有关特定于字段的详细信息,请参阅“错误”数组。
这是完整的输出-
Server is running on port 3000
John Doe [email protected]
{
type: 'https://mailchimp.com/developer/marketing/docs/errors/',
title: 'Invalid Resource',
status: 400,
detail: "The resource submitted could not be validated. For field-specific details, see the 'errors' array.",
instance: 'd2186fc0-10d0-22af-ac4b-b04d7c6a61b7',
errors: [
{
field: 'email_address',
message: 'This value should not be blank.'
}
]
}
这是app.js文件-
const express = require("express");
const app = express();
app.use(express.static("public"));
const mailchimp = require("@mailchimp/mailchimp_marketing");
const bodyParser = require("body-parser");
app.use(bodyParser.urlencoded({ extended: true }));
const request = require("request");
const https = require("https");
const axios = require("axios");
const { response } = require("express");
const port = 3000;
app.get("/", (req, res) => {
res.sendFile(__dirname + "/signup.html");
mailchimp.setConfig({
apiKey: 'rupak:ec9e6dcf527*****8655da1b-us13',
server: "us13"
});
});
app.post("/", function(req, res){
const firstName = req.body.firstName;
const lastName = req.body.secondName;
const email = req.body.email;
console.log(firstName, lastName, email);
const data = {
members: [
{
email_address: email,
status: "subscribed",
merge_fields: {
FNAME: firstName,
LNAME: lastName
}
}
]
}
const jsonData = JSON.stringify(data);
let url = 'https://us13.api.mailchimp.com/3.0/lists/20b****bce/members' ;
const options = {
method: "POST",
auth: "rupak:ec9e6dcf527*****8655da1b-us13"
}
const request = https.request(url, options, (response) => {
response.on("data", (data) => {
console.log(JSON.parse(data));
})
})
request.write(jsonData);
request.end();
});
app.listen(port, () => {
console.log(`Server is running on port ${port}`);
});
据我所知,email_address 字段不为空,因为我已经记录了电子邮件的输出,并且我可以看到我输入的电子邮件正在显示。
**** 编辑 ****
我尝试了另一种方法,但现在我收到了这条很长的错误消息,我根本不明白
这是其中很小的一部分
Error: Bad Request
at Request.callback (C:\Users\Rupak\Desktop\Projects\Web Development\Newsletter-Signup\node_modules\superagent\lib\node\index.js:699:13)
at C:\Users\Rupak\Desktop\Projects\Web Development\Newsletter-Signup\node_modules\superagent\lib\node\index.js:903:18
at Stream.<anonymous> (C:\Users\Rupak\Desktop\Projects\Web Development\Newsletter-Signup\node_modules\superagent\lib\node\parsers\json.js:19:7)
at Stream.emit (node:events:390:28)
at Unzip.<anonymous> (C:\Users\Rupak\Desktop\Projects\Web Development\Newsletter-Signup\node_modules\superagent\lib\node\unzip.js:55:12)
at Unzip.emit (node:events:390:28)
at endReadableNT (node:internal/streams/readable:1343:12)
at processTicksAndRejections (node:internal/process/task_queues:83:21) {
这是更新的 app.js 文件
//jshint esversion: 6
const express = require('express');
const bodyParser = require('body-parser');
const mailchimp = require('@mailchimp/mailchimp_marketing');
const app = express();
app.use(bodyParser.urlencoded({
extended: true
}));
app.use(express.static("public"));
app.get("/", function(req, res) {
res.sendFile(__dirname + "/signup.html");
//setup mailchimp
mailchimp.setConfig({
apiKey: "ec9e6dcf527*****8655da1b-us13",
server: "us13"
})
});
app.post("/", function(req, res) {
var firstName = req.body.firstName;
var lastName = req.body.secondName;
var email = req.body.email;
console.log(`${firstName} ${lastName} ${email}`);
const run = async () => {
//testing if server is working fine
// const response = await mailchimp.ping.get();
// console.log(response);
//add member to list
const response = await mailchimp.lists.addListMember("20b****bce", {
email_address: req.body.email,
status: "subscribed",
merge_fields: {
FNAME: req.body.firstName,
LNAME: req.body.secondName
}
})
console.log(response);
}
run();
});
app.listen(3000, function() {
console.log("Server is running");
});
如有任何帮助,我们将不胜感激
我认为问题在于你有一个
members
数组,而 你正在使用的 api 一次只接受一个成员。如果你将其更改为:,它可能会起作用
const data = {
email_address: email,
status: "subscribed",
merge_fields: {
FNAME: firstName,
LNAME: lastName
}
}
另外,我认为您可以通过使用
@mailchimp/mailchimp_marketing
模块来简单地进行调用,就像在 Mailchimp 中的 node.js 示例中找到的方式一样
文档。您正在导入 Axios,但您正在使用 request
进行呼叫。 该软件包似乎已被弃用。
希望这有帮助。
我发现了错误。显然我不能直接这样做
email_address: req.body.email,
status: "subscribed",
merge_fields: {
FNAME: req.body.firstName,
LNAME: req.body.secondName
}
我需要创建一个用户的对象并将值存储在其中。然后,我必须在向列表添加成员时访问对象中的值。我是这样做的
email_address: subscribingUsers.email_address,
status: "subscribed",
merge_fields: {
FNAME: subscribingUsers.firstname,
LNAME: subscribingUsers.lastname,
}
如果有人告诉我这是为什么,我将不胜感激。在将任何数据发布到服务器时,我们是否需要键值对?如果是这样,为什么不能直接从请求中获取值来工作?
常量数据 = { 成员:[{ 电子邮件地址:电子邮件, 状态:“已订阅”, 合并字段:{ FNAME:名字, LNAME:姓氏, } }] }
这对我有用