我有一个设置,让用户使用PassportJS创建一个帐户,并使用Stripe同时收费。这一切都有效。
问题是目前允许用户使用相同的用户名注册。该函数捕获user.save部分中的错误。然而,即使它捕获错误,它仍然完成创建新用户并为其充电。我需要回到那里。但是,我一直无法弄清楚如何res.redirect或该部分的东西。
如果出现错误,我如何更改我的代码以重定向?
app.post('/quiz', function(req, res) {
var user = new User({
username: req.body.username,
email: req.body.email,
password: req.body.password,
datapoint: req.body.datapoint
})
user.save(function(err) {
console.log('this is the problem' + ' ' + err)
if(err){
// I NEED TO REDIRECT BACK HERE IF THERE IS AN ERROR
// I NEED TO REDIRECT BACK HERE IF THERE IS AN ERROR
// I NEED TO REDIRECT BACK HERE IF THERE IS AN ERROR
// I NEED TO REDIRECT BACK HERE IF THERE IS AN ERROR
// I NEED TO REDIRECT BACK HERE IF THERE IS AN ERROR
}
var token = req.body.stripeToken; // Using Express
var charge = stripe.charges.create({
amount: 749,
currency: "usd",
description: "Example charge",
source: token,
}, function(err, charge) {
if(err) {
console.log(err);
}
console.log('charged')
req.logIn(user, function(err) {
if(err) {
console.log(err);
}
console.log('all looks good')
res.redirect('/jobquiz');
});
});
});
});
答案 0 :(得分:0)
首先,您需要唯一验证您的用户名,以便在尝试使用相同的用户名时,将抛出唯一性错误。当你使用猫鼬时,我建议npm install mongoose-unique-validator
。将您的用户名设置为唯一。 more info.
其次,捕获错误并将其重定向到当前表单(提交前的表单)
if (err) {
// clear cache to prevent 304 response
res.header('Cache-Control', 'no-cache, private, no-store, must-revalidate, max-stale=0, post-check=0, pre-check=0');
return res.redirect('back');
}
'back'
基于req.get('Referrer')
的值,在您的情况下是提交表单。
答案 1 :(得分:0)
在return
之前使用res.redirect()
。它将停止执行。
if (err)
return res.redirect('/anywhere');