2012-12-30 17 views
6

私はmongoose/q約束フレームワークサンプルhereから作業していますが、主にQフレームワークのサンプルが一致していないため、findOneを使用しようとするとnfbindに問題があるようです要点にあるもの。mongooseとq約束

マイコード:

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); 

私はuser.findOne({username:'test'}).then(function(err, user) { ... }を呼び出した場合、ユーザーは常に定義されていません。エクスポートを取り除いて、コールバックで非約束のバージョンを使用すると、私はそのユーザーを取得します。私はいくつかの特別な魔法を見逃していますが、コードの実装を見てから、Q githubの例とmongooseのデモからの例...何も実際には飛び出しません。どのように私はfindOne Qで動作するようになるように任意のアイデア?

私はまた、nfbindの機能をモジュールではなくソースで設定しようとしましたが、役に立たなかった。

+0

チェックもこの答えhttp://stackoverflow.com/questions/11912573/node-js-deferred-promisify-mongoose/11931908 –

答えて

5

あなたはnfbindingている方法はuserオブジェクトのメソッドなので、あなたが呼び出されたときthisポインタが保存されるようにnfbindに渡す前に、そのオブジェクトにそれらをbindする必要があります。

このアプローチは、私の仕事:しようとしました

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

をしている - にも輸出さ名前に矛盾がないことを確認するために 'searchByUsername'と指定します。 MongoDBのユーザー:未定義 – mlaccetti

+1

私は悪意のある人で、アイデアをミックスしていました: 'user.findOne({'steam_username':username})。then(function(err、dbUser){ ...}) ' 単に' err'を削除しました。(これは.failのためのものです)、私たちはレースに出場しました。 Durr! – mlaccetti

+0

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