2012-12-30 13 views
6

Ich arbeite von der Mongoose/q verspricht Framework-Beispiel here, aber scheinen einige Probleme mit der Nfbind beim Versuch zu haben, findOne zu verwenden, vor allem da die Proben aus dem Q Rahmen nicht übereinstimmen diejenigen im Kern.mongoose und q verspricht

Mein Code:

var mongoose = require('mongoose'); 
var Q = require('q'); 

var user_schema = mongoose.Schema({username:String, last_touched:Date, app_ids:[String]}); 
var user = mongoose.model('user', user_schema); 

exports.user = user; 
exports.user.find = Q.nfbind(user.find); 
exports.user.findOne = Q.nfbind(user.findOne); 

Wenn ich user.findOne({username:'test'}).then(function(err, user) { ... } nennen, der Benutzer ist immer undefiniert. Wenn ich den Export entferne und die nicht versprochene Version mit Rückrufen verwende, bekomme ich den Benutzer. Mir fehlt eine spezielle Magie, aber nachdem ich mir die Code-Implementierung angesehen habe, das Beispiel von Q GitHub und von der Mungo-Demo ... Nichts springt wirklich heraus. Irgendwelche Ideen, wie ich einen findOne mit Q arbeiten kann?

Ich habe auch versucht, die nfbind Funktionen in der Quelle und nicht im Modul, aber ohne Erfolg zu setzen.

+0

prüfen auch diese Antwort http://stackoverflow.com/questions/11912573/node-js-deferred-promisify-mongoose/11931908 –

Antwort

5

Da die Methoden Sie nfbinding sind Methoden des user Objekt, müssen Sie sie auf dieses Objekt bind vor ihnen zu nfbind, so dass der this Zeiger beibehalten wird, wenn genannt vorbei.

Dieser Ansatz für mich gearbeitet:

exports.user.find = Q.nfbind(user.find.bind(user)); 
exports.user.findOne = Q.nfbind(user.findOne.bind(user)); 
+0

versucht, dass zu - auch exportiert als 'searchByUsername', um sicherzustellen, dass es sich nicht um einen Namenskonflikt handelt. Immer noch das Gleiche: Benutzer von MongoDB: undefined – mlaccetti

+1

Stellt sich heraus, ich bin ein böser Asshat und mischte Ideen: 'user.findOne ({'steam_username': username}). Dann (function (err, dbUser) { ...}) ' Einfach den' err' (duh, dafür ist .fail) entfernt, und wir waren unterwegs zu den Rennen. Dürr! – mlaccetti

+0

https://github.com/iolo/mongoose-q –