MongoDB, как получить доступ к реляционной модели и обновления - PullRequest
0 голосов
/ 24 декабря 2018

Когда я создаю нового пользователя, я хочу получить доступ к имени и обновлению роли моего пользователя.

Если клиент перенаправляется с маршрутом «/ company / register», то по умолчанию имя роли пользователя будет «company», есликлиент перенаправляется с именем пользователя '/ user / register', это будет гость и т. д. Я новичок в MongoDB и NodeJS, возможно, моя точка зрения совершенно неверна. Я открыт для предложения

const UserSchema = new Schema({
    email:{
        type: String,
        required: true,
        default: ""
    },
    encrypted_password:{
        type:String,
        required:true,
        default: ""
    },
    user_role:[
        {
            role_name:{
                type:String
            },
            is_company:{
                type:Boolean,
                default:false
            },
            write:{
                type:Boolean,
                default:false
            },
            read:{
                type:Boolean,
                default:false
            },
            publish:{
                type:Boolean,
                default:false
            }
        }
    ],
    company:[
        {
            company_name:{
                type:String
            },
            address:{
                type:String
            }
        }
    ],


});

Мой маршрут регистрации

router.post('/register', (req, res) => {
    User.findOne({email: req.body.email})
        .then(company => {
            if (company) {
                return res.status(400).json({
                    email: 'Email already exists'
                });
            }
            else {
                const newUser = new User({
                    // I want to access here
                    email: req.body.email,
                    encrypted_password: req.body.encrypted_password,
                    updated_at: Date.now()
                });
bcrypt.genSalt(10, (err, salt) =>{bcrypt.hash(newUser.encrypted_password, salt, (err, hash) => {newUser.encrypted_password = hash;
                        // New user added
                        newUser
                            .save()
                            .then(user => res.json(user))
                            .catch(err => console.log(err));
                    })
                })
            }
        });
});

Я уже пробовал это, конечно, это не работает

const newUser = new User({
                    email: req.body.email,
                    encrypted_password: req.body.encrypted_password,
                    user_role.role_name: "company",
                    updated_at: Date.now()
                });

Ответы [ 2 ]

0 голосов
/ 24 декабря 2018

Ваше решение - хорошее решение.Я предпочитаю избавляться от времени выделения памяти.

Я предлагаю следующий объект:

const tempUser = {};
tempUser = {
    email: req.body.email,
    encrypted_password: req.body.encrypted_password,
    user_role: {
        role_name:"company",is_company:true
        },
    updated_at: Date.now()
}
const newUser = new User(tempUser);

Основываясь на схеме, я думаю, что вам нужно использовать массив вместо объекта (я говорю о user_role).Вы можете найти его в следующей части:

const tempUser = {};
tempUser = {
    email: req.body.email,
    encrypted_password: req.body.encrypted_password,
    user_role: [{
        role_name:"company",is_company:true
        }],
    updated_at: Date.now()
}
const newUser = new User(tempUser);
0 голосов
/ 24 декабря 2018

Я решил свой случай с помощью этого метода

const company_user_role = {role_name:"company",is_company:true};
                const newUser = new User({
                    email: req.body.email,
                    encrypted_password: req.body.encrypted_password,
                    user_role: company_user_role,
                    updated_at: Date.now()
                });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...