2016-06-01 7 views
0

app.jsschema.post ('발견')와 schema.post ('findOne')

Match.find({}).lean().exec(function(err, matches) {}); 
Match.findById(id).lean().exec(function(err, match) {}); 

나는 다른 경로에 이러한 쿼리를 모두 사용합니다.

경기 - 모델 :

var mongoose = require('mongoose'); 
var Schema = mongoose.Schema; 

var messageSchema = new Schema({ 
    // ... 
    message: {type: String, required: true}, 
}, { 
    timestamps: true 
}); 

var matchSchema = new Schema({ 
    // ... 
    messages: [messageSchema] 
}, { 
    timestamps: true 
}); 

matchSchema.post('find', function(result) { 
    result.forEach(function(chat) { 
     chat.messages.forEach(function(message) { 
      message.createdAt = new Date(message.createdAt).getTime(); 
      message.updatedAt = new Date(message.updatedAt).getTime(); 
     }); 
    }); 
}); 

matchSchema.post('findOne', function(result) { 
    if (result !== null) { 
     result.messages.forEach(function(message) { 
      message.createdAt = new Date(message.createdAt).getTime(); 
      message.updatedAt = new Date(message.updatedAt).getTime(); 
     }); 
    } 
}); 

var Match = mongoose.model('Match', matchSchema); 

module.exports = Match; 

기본 날짜 형식을 구문 분석은 (같은 2016-05-19T13:29:07.731Z가) (나 클라이언트 측에서 사용) 자바 고통은, 즉 내가 대신 유닉스 타임 스탬프를 덮어 쓸 이유 이것은 Java로 포맷하기 쉽습니다. 이 문제는 findfindOne에 대해 중복 코드 (message.createdAt = ... 및 message.updatedAt ..)가 있습니다. findfindByID 쿼리에 대한 트리거가 있습니까? 따라서 코드를 한 번만 작성하면됩니까? findfindById을 트리거하지 않으므로 나는 그 적용해야하므로 findOnefindById에 대한 트리거 것이라고 믿는다

function processResult(result) { 
    if (result) { 
    if (! Array.isArray(result)) { 
     result = [ result ]; 
    } 
    result.forEach(function(chat) { 
     chat.messages.forEach(function(message) { 
      message.createdAt = new Date(message.createdAt).getTime(); 
      message.updatedAt = new Date(message.updatedAt).getTime(); 
     }); 
    }); 
    } 
} 

matchSchema.post('find', processResult); 
matchSchema.post('findOne', processResult); 

: 두 후크가 이미 매우 유사하기 때문에

답변

1

, 모든 (유사) 후크에 의해 사용됩니다 하나 개의 함수로 결합 수 게다가.

+0

예, 가능합니다. 그러나 어쨌든, 모든 다른 select (find/findOne/findById) 유형에 대해 ** hook **이 없습니까? – Chris

+0

아니요, 모든 것을 잡을 단일 후크가없는 것 같습니다. – robertklep