如何通过反应以快递方式向mailchimp发送发布请求

Posted

技术标签:

【中文标题】如何通过反应以快递方式向mailchimp发送发布请求【英文标题】:How to send a post request to mailchimp on express through react 【发布时间】:2019-12-16 07:34:07 【问题描述】:

我正在尝试从表单发送新的会员资格,以响应我的快速服务器以添加到 mailchimp 会员列表中我收到一个 cors 错误,我不知道我是否缺少任何代理。我希望用户能够在 react 中注册,然后将其发送到 mailchimp 数据库

我已经获得了成员名单,但我不能在上面发帖:

这是我的快递后台:

const express = require('express');
const Mailchimp = require('mailchimp-api-v3');
require('dotenv').config();

var request = require('superagent');
var mc_api_key = process.env.REACT_APP_MAILCHIMP_API;
var list_id = process.env.REACT_APP_LIST_ID;

const app = express();

const mailchimp = new Mailchimp(mc_api_key);
const port = process.env.PORT || 5000;

// console.log that your server is up and running
app.listen(port, () => console.log(`Listening on port $port`));

app.use((request, response, next) => 
response.header("Access-Control-Allow-Origin", "*");
response.header("Access-Control-Allow-Headers", "Content-Type");
next();
);

// Routes
app.post('/signup', function (req, res) 
request
    .post('https://' + 'us20' + '.api.mailchimp.com/3.0/lists/' + list_id + '/members/')
    .set('Content-Type', 'application/json;charset=utf-8')
    .set('Authorization', 'Basic ' + new Buffer('any:' + mc_api_key ).toString('base64'))
    .send(
      'email_address': req.body.email,
      'status': 'subscribed',
      'merge_fields': 
        'FNAME': req.body.firstName,
        'LNAME': req.body.lastName
      
    )
        .end(function(err, response) 
          if (response.status < 300 || (response.status === 400 && response.body.title === "Member Exists")) 
            res.send('Signed Up!');
           else 
            res.send('Sign Up Failed :(');
              
          );
);

这是我试图在我的app.js 文件中获取反应的地方:

onSubmit = (e,email) => 
  e.preventDefault()
  this.setState(user:email)
  fetch('http://localhost:5000/signup',
    method: 'POST',
    headers: 
      'Accept':'application/json',
      'Content-type':'application/json'
      ,
    body: JSON.stringify(email_address: email, status: 'subscribed')
  ).then(console.log)
;

单击提交时,我希望将成员电子邮件地址发送到 mailchimp API,而不是收到此错误:

从原点获取 'http://localhost:5000/signup' 的访问权限 'http://localhost:3000' 已被 CORS 策略阻止:响应 预检请求未通过访问控制检查:否 'Access- 请求的资源上存在 Control-Allow-Origin' 标头。如果 不透明的响应满足您的需求,将请求的模式设置为 'no-cors' 来获取禁用 CORS 的资源。

【问题讨论】:

【参考方案1】:

试试这个。

app.use((request, response, next) => 
   response.header("Access-Control-Allow-Origin", "*");
   response.header("Access-Control-Allow-Headers", "Content-Type");
   next();
);

app.use(function(req, res, next) 
  res.header("Access-Control-Allow-Origin", "http://localhost:5000");
  next();
);

【讨论】:

【参考方案2】:

只需在您的服务器上启用 CORS。

    安装cors
$ npm install --save cors
    在 express 中启用 cors:
const cors = require('cors');
const express = require('express');

const app = express();
app.use(cors());

更多关于corshere。

【讨论】:

以上是关于如何通过反应以快递方式向mailchimp发送发布请求的主要内容,如果未能解决你的问题,请参考以下文章

以快递方式从 POST 请求处理程序发送 WebSocket 消息

如何使用 python 使用 mailchimp 发送 html 邮件

通过 MailChimp API v3.0 向列表发送电子邮件?

通过Angular App和NodeJS向快递服务器发送GET / POST请求时如何修复404 Not Found

如何让服务器将远程 json 对象返回给客户端?反应/快递/web3

如何使用标签创建 mailchimp 活动?