Я работаю над проектом в 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)
Ошибка возникает на сервере JS at /Users/Documents/myProjects/pages/routes/userRouter.js:48:17
, где MailChimp отправляет запрос на публикацию.
Если я удаляю код для MailChimp, ошибка не возникает. Будем благодарны за любые идеи, как это исправить.