Javascript 使用NodeJS向条带客户添加卡
我正在我的NodeJS应用程序中构建我的addCard控制器,以便向现有的stripe客户添加一张卡。目前,我使用的代码如下:Javascript 使用NodeJS向条带客户添加卡,javascript,node.js,express,stripe-payments,Javascript,Node.js,Express,Stripe Payments,我正在我的NodeJS应用程序中构建我的addCard控制器,以便向现有的stripe客户添加一张卡。目前,我使用的代码如下: const user = await User.findById(req.params.user_id) //Send error if user is not found if(!user){ return next(new ErrorResponse('Resource not found', 404)) } await S
const user = await User.findById(req.params.user_id)
//Send error if user is not found
if(!user){
return next(new ErrorResponse('Resource not found', 404))
}
await Stripe.customers.retrieve(
user.stripe.customer_id,
async function(err, customer) {
if (err){
return next(new ErrorResponse(err.message, err.statusCode))
} else{
if(customer.sources.data.length > 0){
return next(new ErrorResponse('User already has a card on file', 403));
} else{
//If no card on file, create a new card for the user
await Stripe.customers.createSource(
user.stripe.customer_id,
{source: req.body.cardtok}, //card token generated by client
async function(err, card) {
if(err){
return next(new ErrorResponse(err.message, err.statusCode));
} else{
res.status(200).json({
success: true,
data: card
});
}
}
);
}
}
}
);
有更好的办法吗?虽然我的代码确实像预期的那样工作,但我无法避免思考有点混乱。我使用的是Node、express和mongodb。这里似乎混合了异步/等待和回调;我想你可以这样做:
const user = await User.findById(req.params.user_id);
//Send error if user is not found
if (!user) {
return next(new ErrorResponse("Resource not found", 404));
}
let customer;
try {
customer = await Stripe.customers.retrieve(user.stripe.customer_id);
} catch (err) {
return next(new ErrorResponse(err.message, err.statusCode));
}
if (customer.sources.data.length > 0) {
return next(new ErrorResponse("User already has a card on file", 403));
}
//If no card on file, create a new card for the user
let card;
try {
card = Stripe.customers.createSource(
user.stripe.customer_id,
{ source: req.body.cardtok } //card token generated by client
);
} catch (err) {
return next(new ErrorResponse(err.message, err.statusCode));
}
res.status(200).json({
success: true,
data: card,
});
的确是这样。谢谢你!它就像一个魔咒,你设置它的方式,只需要等待Stripe.customers.createSource,但其他一切都是完美的。