具有MailChimp自动化错误的快速用户注册

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

我正在Express中进行一个具有用户身份验证的项目,并在注册后通过MailChimp向用户发送电子邮件。

userRouter.js

//signup
userRouter.post('/signup', async (req, res, next) => {
  const { username, password, email } = req.body;
  const pwDigest = await bcrypt.hash(password, SALT);
  const newUser = await User.create({
    username: username,
    password_digest: pwDigest,
    email,
  });
  const tokenData = {
    username: newUser.username,
    email: newUser.email,
    id: newUser.id,
  };
  const token = genToken(tokenData);
  let userData = newUser.toJSON();
  let { password_digest, ...user } = userData;
  res.json({
    token,
    user,
  });
  request
        .post('https://' + mailchimpInstance + '.api.mailchimp.com/3.0/lists/' + listUniqueId + '/members/')
        .set('Content-Type', 'application/json;charset=utf-8')
        .set('Authorization', 'Basic ' + new Buffer('any:' + mailchimpApiKey ).toString('base64'))
        .send({
          'email_address': req.body.email,
          'status': 'subscribed'
        })
        .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 :(');
          }
      });
});

注册工作正常,注册后用户确实通过MailChimp收到电子邮件。但是,Express服务器在注册后也会崩溃:

_http_outgoing.js:535
    throw new ERR_HTTP_HEADERS_SENT('set');
    ^

Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client
    at ServerResponse.setHeader (_http_outgoing.js:535:11)
    at ServerResponse.header (/Users/Documents/myProjects/pages/node_modules/express/lib/response.js:771:10)
    at ServerResponse.send (/Users/Documents/myProjects/pages/node_modules/express/lib/response.js:170:12)
    at /Users/Documents/myProjects/pages/routes/userRouter.js:48:17
    at Request.callback (/Users/Documents/myProjects/pages/node_modules/superagent/lib/node/index.js:879:3)
    at /Users/Documents/myProjects/pages/node_modules/superagent/lib/node/index.js:1100:20
    at IncomingMessage.<anonymous> (/Users/Documents/myProjects/pages/node_modules/superagent/lib/node/parsers/json.js:22:7)
    at Stream.emit (events.js:321:20)
    at Unzip.<anonymous> (/Users/Documents/myProjects/pages/node_modules/superagent/lib/node/unzip.js:53:12)

该错误发生在MailChimp正在发送发布请求的服务器JS at /Users/Documents/myProjects/pages/routes/userRouter.js:48:17中。

如果删除MailChimp的代码,则不会发生此错误。任何有关如何解决此问题的想法将不胜感激。

node.js express mailchimp-api-v3.0
1个回答
0
投票

您正在使用哪个请求库和哪个nodejs版本。但是似乎代码在发送后试图设置标头。您可以尝试用我的代码替换代码吗,如果错误仍然存​​在,请告诉我。

request.post({
  headers: {
    'content-type' : 'application/json;charset=utf-8',
    'Authorization': `Basic${new Buffer('any:' + mailchimpApiKey ).toString('base64'))}`
  },
  url:`https://${mailchimpInstance}.api.mailchimp.com/3.0/lists/ ${listUniqueId}/members/`,
  body:  {
      'email_address': req.body.email,
      'status': 'subscribed'
    }
}, function(error, response){
      if (response.status < 300 || (response.status === 400 && response.body.title === "Member Exists")) {
        res.send('Signed Up!');
      } else {
        res.send('Sign Up Failed :(');
      }
});
© www.soinside.com 2019 - 2024. All rights reserved.