2017-12-29 16 views
0

Ich erstelle ein neues Dokument in meiner Datenbank und vor dem Speichern, dass ich eine andere Aktion ausführen möchte. aber die pre save Methode wird nicht ausgeführt.Mongoose Pre Save Methode nicht triggern

Mein Code Neues Dokument zu erstellen:

let create = (req, res) => { 


    let newProposal = Proposal(); 

    newProposal.sector = req.body.sector; 
    newProposal.client = req.body.client; 
    newProposal.owner = req.body.owner; 
    newProposal.proposalTitle = req.body.proposalTitle; 
    newProposal.proposalRegion = req.body.proposalRegion; 
    newProposal.clientContact = req.body.clientContact; 


    newProposal.save() 
    .then((savedProposal) => {return _updateUser(req.decoded._id, savedProposal)}) 
    .then(() => {return _checkClientExists(req.body.client)}) 
    .then((client) => {return _updateClientList(client, req.body)}) 
    .then(() => {res.json(newProposal)}) 
    .catch(err => {sendJsonResponse(res, 500, err)}) 
}; 

Mein Pre speichern Code:

proposalSchema.pre('save', function(next) { 
    console.log("Does not work"); 
}); 

Ich habe auch versucht pre validate verwenden.

Was mache ich falsch? Ich bin seit Stunden festgefahren.

Update: Vorschlag Schema Code:

const proposalSchema = new mongoose.Schema({ 

proposalNo: Number, 
proposalUrls: {type: String, default: 'none'}, 
proposalStatus: {type: String, default: 'live' ,set: toLower}, 
sector: {type: String, set: toLower}, 
client: {type: String, set: toLower}, 
owner: {type: String, set: toLower}, 
proposalTitle: {type: String, set: toLower}, 
proposalRegion: String, 
clientContact: {type: String, set: toLower}, 


dateCreated: {type: Date, default: Date.now}, 

}); 

function toLower(data) { 
    return data.toLowerCase(); 
} 

proposalSchema.pre('save', function(next) { 
    console.log("Does not work"); 
}); 

mongoose.model('Proposals', proposalSchema); 

Update 2:

const Counter = require('../models/counter'); 

proposalSchema.pre('save', function(next) { 
    let doc = this; 

    Counter.findByIdAndUpdate({_id: 'entityId'},{$inc: { seq: 1}},{"upsert": true,"new": true }, function(error, counter) { 
     if(error) { 
      return next(error); 
     } 

     doc.proposalNo = counter.seq; 
     next(); 
    }); 
}); 
+0

Können Sie nach mehr von der 'Proposal' Modell Erklärung? –

+0

@TsvetanGanev sehen Sie bitte aktualisierte Fragen für den Code. – Skywalker

+0

Wie exportieren Sie das Modell? Ich sehe keine Zuordnung des Ergebnisses von 'mongoose.model()'. –

Antwort

0

Sie müssen Ihr Modell mit dem new Schlüsselwort instanziieren. Zitieren der Mongoose-Dokumentation:

Modelle sind Phantasie Konstruktoren aus unseren Schemadefinitionen zusammengestellt.

let newProposal = new Proposal(); 
+0

Ich habe es gerade versucht und thew Fehler bleibt immer noch. Es hat mich verrückt gemacht. – Skywalker

+0

Warte, was ist der Fehler? Du hast nicht gesagt, dass dein aktueller Code Fehler verursacht hat, du hast gesagt, dass nur die "pre-save" -Funktion nicht ausgeführt wurde. –

+0

Es wirft einen 'internen Serverfehler 500' und sonst nichts. Wenn ich den 'pre save' Code entferne funktioniert alles gut. – Skywalker

Verwandte Themen