2016-12-16 5 views
-1

私はmongooseを初めて利用しています。クライアントからのデータを保存し、mongooseスキーマでnodejsを使用することを約束し、hanldeの約束を得たら、理解したいだけです。以下の例では、エラーが発生した場合にコレクションハンドルにデータを保存しようとしています。マングースの約束をどのように処理するのですか?

model.js

var mongoose = require('bluebird').promisifyAll(require('mongoose')); 

var UserAccessSchema = new mongoose.Schema({ 
    firstname: String, 
    lastname: String, 
    uid: String, 
    email: String, 
}); 

export default mongoose.model('UserAccess', UserAccessSchema); 

controller.js

var UserAccess = require('./access.model'); 

export function create(req, res) { 
    console.log(req.body); 
    UserAccess.createAsync(req.body) 
    .then() 
    .catch(); 

} 

index.js

var express = require('express'); 
var controller = require('./access.controller'); 
var router = express.Router(); 

router.post('/', controller.create); 

module.exports = router; 

答えて

1

あなたは非同期オブジェクトにアクセスするオブジェクトをPromise.promisifyAllする必要があります。このような

var Promise = require('bluebird') 
var mongoose = require('mongoose'); 

var UserAccessSchema = new mongoose.Schema({ 
    firstname: String, 
    lastname: String, 
    uid: String, 
    email: String, 
}); 

var model = mongoose.model('UserAccess', UserAccessSchema); 

model = Promise.promisifyAll(model) 

export default model; 

この方法で、あなたが作成し、適切なasync方法であなたのモデルを持っています。

しかし、明確にするために、ブルーバードを使用してPromisesで作業するにはブルーバードは必要ありません。

実際には、クエリ.exec()の後にメソッドを追加してPromiseを返すことができます。

ドキュメント内のsectionを参照できます。

+0

私はあなたが '.exec()'を必要としないと思います。私は 'Model.find()。then(function(docs){})'のようなことをします。 –

+0

@jackblankクエリは実行可能ですが、それは約束ではありません。たとえば、catchメソッドはありません。 – thalesmello

+0

ありがとう私はそれを動作させる方法を考えています。 – hussain

関連する問題