我在发送标题后无法设置标题'在Heroku上使用Stripe API运行项目时出错。通过大量的搜索,我认为在return;
或send()
之前没有拨打render()
,但我已经尝试过了不确定它的意图。
我的代码:
app.post('/charge', (req, res) => {
const amount = 999;
const plan = stripe.plans.create({
currency: 'gbp',
interval: 'month',
name: 'XXXX',
amount: 999
});
stripe.customers.create({
email: req.body.stripeEmail,
source: req.body.stripeToken
})
.then(customer => stripe.charges.create({
amount,
description: 'XXXX',
currency: 'gbp',
customer: customer.id
}, function(err, subscription){
if(err){
res.send({
success: false,
message: 'Error'
});
} else {
const {id} = customer;
stripe.subscriptions.create({
customer: id,
items: [
{
plan: 'XXXXX'
}
]
}, function(err,subscription){
if(err){
res.send({
success: false,
message: 'Error'
});
} else {
res.send({
success: true,
message: 'success'
});
}
});
}
}))
.then(charge => res.render('success'));
});
非常感谢任何帮助!
答案 0 :(得分:0)
当您在为同一请求发送响应(即res.send()两次后尝试设置标头时,会出现此错误。
在你的代码中,我想在一个错误块的res.send()之后,第二个错误块正在执行。
如果可能,请尝试仅使用承诺或仅使用回调,它很容易调试。
您可以像这样优化代码 -
stripe.customers.create(ob1)
.then(res1 => {
if(res1){
return stripe.charges.create(ob2)
}
})
.then(res2 => {
if(res2){
return stripe.operation3(ob3)
}
})
.then(res3 => {
if(res3){
// Success response
}
})
.catch(err => {
// Send error message accordingly
});
如果需要更多的flex错误处理,你也可以为每个创建else,但是请仔细处理其他块。