данные формы доступа javascript из хуков схемы mongoose - PullRequest
2 голосов
/ 06 июня 2019

У меня есть форма, в которой я разделил ее содержимое на две схемы mongodb

Я хотел бы читать переменные, которые находятся внутри node.js / express.js, непосредственно в хуках схемы mongoose либо через pre, либо послекрючки схемы.это мои файлы

express.js

var firstName = req.body.first_name;
var lastName = req.body.last_name;
var fullName = firstName+' '+lastName;
var employmentDate = req.body.employment_date;
var responsibility = req.body.responsibility;

userschema.full_name = fullName;
userschema.first_name = firstName;
userschema.last_name = lastName;
userschema.save(function (err, result){

});
/******************express UPDATE START**********/
    user  = new userschema(req.body)
    employment = new employmentObject(req.body)

    employment.employment_date= employmentDate;
    employment.responsibility= responsibility;
/******************express UPDATE ENDS**********/

Schema.js

var userSchema = mongoose.Schema({
        full_name           : String,
        other_name          : String,
        last_name           : String,
        email               : String
        });

userSchema.pre('save', function (){
    //obtain values from form field
    var field1 = employmentDate;
    var field2 = responsibility;

    const employmentObject = this.model('employment-detail');   
    /******************schema UPDATE START**********/
    var emp_Date = employmentObject.employment_date;
    var duties = employmentObject.responsibility;
    /******************schema UPDATE ENDS**********/

    employmentObjectins = new employmentObject({
                                'employment_date': formField1,
                                'responsibility' :formField2
                        });

        employmentObjectins.save(function (err){
        if(err){
            console.log(err+' error saving object');
        }
        else{
            console.log('no error in saving object');
        }
    });
});

Это просто суммарный контент, он длиннее этого.Но это основная концепция.Основными областями является получение содержимого express.js в схему модели

ОБНОВЛЕНИЕ

EmploymentDate и ответственность не в userSchema, а в jobSchema Как я могуполучить поля, которые не находятся в userSchema (основная схема), но находятся в EmploymentSchema (вторая схема)

ВТОРОЕ ОБНОВЛЕНИЕ

При модификации выше это производитerror ParallelSaveError: Невозможно сохранить () один и тот же документ несколько раз параллельно.Документ:

Что я делаю неправильно

ТРЕТЬЕ ОБНОВЛЕНИЕ

Когда я сделал модификацию на основе того, что вы сказали, я обнаружил, что когда у меня есть двамодели, объявленные в express.js со своими полями / переменными модели, и я вызываю вторую модель в предварительном хуке первой модели, это выдает мне эту ошибку Не могу сохранить () один и тот же документ несколько раз параллельно.

После внесения изменений в код.Это файлы, которые существуют

Express.js

var firstName = req.body.first_name;
var lastName = req.body.last_name;
var fullName = firstName+' '+lastName;
var employmentDate = req.body.employment_date;
var responsibility = req.body.responsibility;

userschema.full_name = fullName;
userschema.first_name = firstName;
userschema.last_name = lastName;
userschema.save(function (err, result){

});

employment.employment_date= employmentDate; <---
employment.responsibility= responsibility; <---
//I believe that I would need to declared this in order to use it in the schema

user  = new userschema(req.body)
employment = new employmentObject(req.body)

userschema.js

var userSchema = mongoose.Schema({
        full_name           : String,
        other_name          : String,
        last_name           : String,
        email               : String
        });

userSchema.pre('save', function (){
    //obtain values from form field
    var field1 = employmentDate;
    var field2 = responsibility;

    const employmentObject = this.model('employment-detail');   
    var emp_Date = employmentObject.employment_date;<-- I am calling what I declared earlier
    var duties = employmentObject.responsibility;<-- I am calling what I declared earlier in express
   **//when I declared above two lines it brings up the error **
   **//Can't save() the same doc multiple times in parallel.**
    employmentObjectins = new employmentObject({
                                'employment_date': emp_Date,
                                'responsibility' :duties
                        });

        employmentObjectins.save(function (err){
        if(err){
            console.log(err+' error saving object');
        }
        else{
            console.log('no error in saving object');
        }
    });
});

Ответы [ 2 ]

1 голос
/ 06 июня 2019

Это то, что я делаю в своих проектах

let userData = new UserModel(req.body);
let employmentData = new EmploymentModel(req.body);

Это сохранит все параметры из req.body, соответствующие схеме

0 голосов
/ 28 июня 2019
const Schema = mongoose.Schema;
const bcrypt = require('bcrypt-nodejs');
const crypto =  require('crypto')
const Userschema = new Schema({
    email:{
            type:String,
            unique:true,
            lowercase:true
    },
    name:String,
    password:String,
    picture:String,
    isSeller:{type:Boolean,default:false},
    address:{
        addr1:String,
        addr2:String,
        city:String,
        state:String,
        country:String,
        postalCode:String
    },
    created:{type:Date,default:Date.now}
});
// this pre function do encryption before saving the password into database
Userschema.pre('save',async function(next){
    var user  =this;
    console.log(user.password);
    if (!user.isModified('password')) {
        return next();
    }

    bcrypt.hash(user.password,null,null,(err,hash)=>{       
        if (err) {
            return next(err);
        }
       user.password = hash;
        next();
       **this is my mistake I miss "next()"**
    })
})

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...