Wie die Abfrage innerhalb der Mungo pre-hook in eine Node.js - / Express-app?
Ich Baue ein basic-blog Node.js - /Express-mit MongoDB w/Mungo ORM.
Ich habe einen pre 'speichern' Haken, die ich verwenden möchte, zum automatischen generieren von blog/Idee slug für mich. Dies funktioniert gut und gut, außer für den Teil, wo ich Abfragen will, um zu sehen, wenn es irgendwelche anderen vorhandenen Beiträge mit den gleichen slug, bevor Sie fortfahren.
Jedoch scheint es, dass this
keinen Zugriff haben .finden oder .findOne() und so habe ich immer ein Fehler.
Was ist der beste Weg, dies zu nähern?
IdeaSchema.pre('save', function(next) {
var idea = this;
function generate_slug(text) {
return text.toLowerCase().replace(/[^\w ]+/g,'').replace(/+/g,'-').trim();
};
idea.slug = generate_slug(idea.title);
//this has no method 'find'
this.findOne({slug: idea.slug}, function(err, doc) {
console.log(err);
console.log(doc);
});
//console.log(idea);
next();
});
Du musst angemeldet sein, um einen Kommentar abzugeben.
Leider, es ist nicht sehr gut dokumentiert (keine Erwähnung von ihm in der Document.js API-docs), aber Dokumente, Zugriff auf Ihre Modelle durch die
constructor
Feld - ich benutze es die ganze Zeit für die Anmeldung, die Dinge aus plugins, die gibt mir Zugang zu welchem Modell Sie sind beigefügt.Für Ihre situation, sollten Sie in der Lage zu tun:
findOne()
, müssen Sie Sie verschieben dienext()
Rückruf innerhalb der findOne-Rückruf.In
this
haben Sie das Dokument, nicht das Modell. Methode findOne ist nicht auf dem Dokument.Wenn Sie brauchen, können Sie das Modell immer abrufen, wie gezeigt hier. Aber cleverer wäre, nur ordnen Sie das Modell in eine variable an der Stelle der Schöpfung.
Dann verwenden Sie diese variable, überall, das Sie wünschen. Wenn es in einer anderen Datei, dann verwenden Sie Modul.Exporte und benötigen, um es anderswo in Ihrem Projekt.
So etwas wie dieses: