我正在开发我的第一个node.js应用程序,我需要一些帮助。
我使用MongoDb作为数据库。
在我的应用程序中,我创建了一个(注册)方法,该方法可以读取用户输入(例如电子邮件和密码),并设置其他字段,例如名字和姓氏清空字符串。
exports.postSignup = (request, response, next) => {
const email = request.body.email;
const password = request.body.password;
const fonfirmPassword = request.body.confirmPassword;
User.findOne({ email: email })
.then(userDoc => {
if (userDoc) {
request.flash('error', 'Email already exists, please pick another!')
return response.redirect('/auth/signup');
}
return bcrypt.hash(password, 12)
.then(hashedPassword => {
const user = new User({
firstName: '',
lastName: '',
email: email,
photoUrl: '',
password: hashedPassword,
cart: { items: [] }
})
return user.save();
})
.then(result => {
response.redirect('/auth/login');
const signup = {
to: email,
from: 'support@company.com',
templateId: keys.SIGNUP_TEMPLATE_ID,
dynamic_template_data: {
subject: 'Signup succeeded successfully!',
},
};
sgMail.send(signup);
})
.catch(err => {
console.log(err);
});
})
.catch(err => {
console.log(err);
});
};
上面的代码可以正常工作... 用户登录到其帐户后,该用户可以导航到其个人资料页面并设置其名字和姓氏,如附件中所示图片。
因此,我创建了另一种方法,该方法允许用户设置其名,名和照片网址 >
exports.postAddProfile = (request, response, next) => {
const firstName = request.body.firstName;
const lastName = request.body.lastName;
const photoUrl = request.body.photoUrl;
User.findOne({ userId: request.user.userId })
.then(user => {
user.firstName = firstName;
user.lastName = lastName;
user.photoUrl = photoUrl;
return user.save();
})
.then(result => {
console.log('Added Profile Info');
response.redirect('/');
})
.catch(err => {
console.log(err)
});
};
此代码也可以正常工作,但问题是,如果用户设置了他们的名,名和照片网址,第一次喜欢(Jonas,Jsk和https://photourl.com) 然后,如果用户仅第二次更改名,则姓和 photo-Url 再次设置为空字符串。 / p>
如何避免这种情况?
答案 0 :(得分:1)
空字符串在JS中是虚假的,因此只需检查response
的值是否不是空字符串即可。
User.findOne({ userId: request.user.userId })
.then(user => {
user.firstName = firstName ? firstName : user.firstName;
user.lastName = lastName ? lastName : user.lastName;
user.photoUrl = photoUrl ? photoUrl : user.photoUrl;
return user.save();
})