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

时间:2019-01-13 03:22:22

标签: javascript html node.js mongodb ejs

我正在开发我的第一个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);
        });
};

上面的代码可以正常工作... 用户登录到其帐户后,该用户可以导航到其个人资料页面并设置其名字姓氏,如附件中所示图片。

enter image description here

因此,我创建了另一种方法,该方法允许用户设置其照片网址

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>

如何避免这种情况?

1 个答案:

答案 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();
    })