2016-12-16 2 views
-1

나는 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 방법과 모델을해야합니다.

하지만 분명히 밝히기 위해 블루 버드와의 약속을 위해 블루 버드가 필요하지 않습니다.

.exec() 쿼리 후 메서드를 추가하면 약속을 반환 할 수 있습니다.

설명서의 section을 참조 할 수 있습니다.

+0

'.exec()'이 필요하다고 생각하지 않습니다. 나는 Model.find()와 같은 일을한다. then (function (docs) {})' –

+0

@jackblank 질의는 가능하지만, 그것이 약속이라는 의미는 아니다. 예를 들어, catch 메소드가 없습니다. – thalesmello

+0

감사합니다. 어떻게 작동시키는 지 생각해 냈습니다. – hussain

관련 문제