Javascript 如果值存在,如何避免将字段设置为空字符串
我正在开发我的第一个node.js应用程序,我需要一些帮助 我使用MongoDb作为数据库 在我的应用程序中,我创建了一个注册方法,该方法读取用户输入,如电子邮件和密码,并将其他字段(如名字和姓氏)设置为空字符串Javascript 如果值存在,如何避免将字段设置为空字符串,javascript,html,node.js,mongodb,ejs,Javascript,Html,Node.js,Mongodb,Ejs,我正在开发我的第一个node.js应用程序,我需要一些帮助 我使用MongoDb作为数据库 在我的应用程序中,我创建了一个注册方法,该方法读取用户输入,如电子邮件和密码,并将其他字段(如名字和姓氏)设置为空字符串 exports.postSignup = (request, response, next) => { const email = request.body.email; const password = request.body.password; co
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);
});
};
上面的代码运行良好。。。
用户登录到其帐户后,该用户可以导航到其个人资料页面,并设置其名和姓,如所附图像所示
所以我创建了另一个方法,允许用户设置他们的名字、姓氏和照片Url
这段代码也可以很好地工作,但问题是如果用户第一次设置了他们的名字、姓氏和照片Url,比如Jonas、Jsk和
第二次,如果用户只更改名字,那么姓氏和照片Url将再次设置为空字符串
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);
});
};
如何避免这种情况?空字符串在JS中是错误的,因此只需检查响应中是否有非空字符串的值:
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();
})
很高兴为您服务:我需要关于另一个问题的帮助。似乎User.findOne{userId:request.User.userId}没有接收当前登录的用户。因此,如果我的数据库中有多个已签名的用户,那么更改总是会影响数据库中的第一个用户。我认为问题的原因是没有签名。您的解决方案是使用request.params.userId。如果您希望用户id在url中可见,则路由的链接将是[冒号是必需的],或者只需再次使用request.body,其中包含id。或者:您可以为您的网站实现浏览器会话,这花费了我一些时间,但最终得到了修复-再次感谢