Javascript 如果值存在,如何避免将字段设置为空字符串

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

我正在开发我的第一个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);
        });
};
上面的代码运行良好。。。 用户登录到其帐户后,该用户可以导航到其个人资料页面,并设置其名和姓,如所附图像所示

所以我创建了另一个方法,允许用户设置他们的名字、姓氏和照片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。或者:您可以为您的网站实现浏览器会话,这花费了我一些时间,但最终得到了修复-再次感谢