Mailchimp:无法验证提交的资源。有关特定于字段的详细信息,请参阅“错误”数组

问题描述 投票:0回答:3

尝试将成员添加到列表中,但我不断收到此错误:无法验证提交的资源。有关特定于字段的详细信息,请参阅“错误”数组。

这是完整的输出-

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");
});

如有任何帮助,我们将不胜感激

node.js express mailchimp
3个回答
0
投票

我认为问题在于你有一个

members
数组,而 你正在使用的 api 一次只接受一个成员。如果你将其更改为:

,它可能会起作用
const data = {
     email_address: email,
     status: "subscribed",
     merge_fields: {
         FNAME: firstName,
         LNAME: lastName
    }
}

另外,我认为您可以通过使用

@mailchimp/mailchimp_marketing
模块来简单地进行调用,就像在 Mailchimp 中的 node.js 示例中找到的方式一样 文档。您正在导入 Axios,但您正在使用
request
进行呼叫。 该软件包似乎已被弃用

希望这有帮助。


0
投票

我发现了错误。显然我不能直接这样做

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,
}

如果有人告诉我这是为什么,我将不胜感激。在将任何数据发布到服务器时,我们是否需要键值对?如果是这样,为什么不能直接从请求中获取值来工作?


0
投票

常量数据 = { 成员:[{ 电子邮件地址:电子邮件, 状态:“已订阅”, 合并字段:{ FNAME:名字, LNAME:姓氏, } }] }

这对我有用

© www.soinside.com 2019 - 2024. All rights reserved.