【发布时间】:2019-06-07 12:22:57
【问题描述】:
我正在开发我的第一个 node.js 应用程序,我需要一些帮助。
我使用 MongoDb 作为数据库。
在我的应用程序中,我创建了一个(注册)方法,它读取用户输入(例如电子邮件和密码)并设置其他字段,例如 first-name 和 last-name 清空字符串。
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);
});
};
上面的代码运行良好... 用户登录到他们的帐户后,该用户可以导航到他们的个人资料页面并设置他们的 first-name 和 last-name,如附件所示图片。
所以我创建了另一种方法,允许用户设置他们的 first-name、last-name 和 photo-Url
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)
});
};
此代码也可以正常工作但问题是如果用户设置他们的 first-name、last-name 和 photo-Url第一次喜欢(Jonas、Jsk 和 https://photourl.com) 然后第二次,如果用户只更改了 first-name,则 last-name 和 photo-Url 再次设置为空字符串。
我怎样才能避免这种情况?
【问题讨论】:
标签: javascript html node.js mongodb ejs