2017-12-29 1 views
0

DB에 새 문서를 만들고 저장하기 전에 다른 작업을 수행하고 싶습니다. pre save 메서드는 실행되지 않습니다.몽구스 Pre Save Method not triggerering

내 코드는 새 문서를 만들려면

let create = (req, res) => { 


    let newProposal = Proposal(); 

    newProposal.sector = req.body.sector; 
    newProposal.client = req.body.client; 
    newProposal.owner = req.body.owner; 
    newProposal.proposalTitle = req.body.proposalTitle; 
    newProposal.proposalRegion = req.body.proposalRegion; 
    newProposal.clientContact = req.body.clientContact; 


    newProposal.save() 
    .then((savedProposal) => {return _updateUser(req.decoded._id, savedProposal)}) 
    .then(() => {return _checkClientExists(req.body.client)}) 
    .then((client) => {return _updateClientList(client, req.body)}) 
    .then(() => {res.json(newProposal)}) 
    .catch(err => {sendJsonResponse(res, 500, err)}) 
}; 

내 사전 저장 코드 :

proposalSchema.pre('save', function(next) { 
    console.log("Does not work"); 
}); 

는 또한 pre validate를 사용하여 시도했다.

내가 뭘 잘못하고 있니? 나는 몇 시간 동안 붙어있어.

업데이트 : 제안 스키마 코드 :

const proposalSchema = new mongoose.Schema({ 

proposalNo: Number, 
proposalUrls: {type: String, default: 'none'}, 
proposalStatus: {type: String, default: 'live' ,set: toLower}, 
sector: {type: String, set: toLower}, 
client: {type: String, set: toLower}, 
owner: {type: String, set: toLower}, 
proposalTitle: {type: String, set: toLower}, 
proposalRegion: String, 
clientContact: {type: String, set: toLower}, 


dateCreated: {type: Date, default: Date.now}, 

}); 

function toLower(data) { 
    return data.toLowerCase(); 
} 

proposalSchema.pre('save', function(next) { 
    console.log("Does not work"); 
}); 

mongoose.model('Proposals', proposalSchema); 

업데이트 2 :

const Counter = require('../models/counter'); 

proposalSchema.pre('save', function(next) { 
    let doc = this; 

    Counter.findByIdAndUpdate({_id: 'entityId'},{$inc: { seq: 1}},{"upsert": true,"new": true }, function(error, counter) { 
     if(error) { 
      return next(error); 
     } 

     doc.proposalNo = counter.seq; 
     next(); 
    }); 
}); 
+0

당신은'Proposal' 모델 선언의 자세한 내용을 게시 할 수 있습니까? –

+0

@TsvetanGanev 코드에 대한 업데이트 된 질문을 참조하십시오. – Skywalker

+0

모델을 어떻게 내 보냅니 까? 'mongoose.model()'의 결과가 할당되지 않았습니다. –

답변

0

당신은 new 키워드 모델을 인스턴스화해야합니다. 몽구스 문서를 인용 :

모델은 우리의 스키마 정의에서 컴파일 된 멋진 생성자입니다.

let newProposal = new Proposal(); 
+0

방금 ​​시도했지만 오류는 여전히 남아 있습니다. 그게 날 미치게 했어. – Skywalker

+0

잠깐, 오류는 무엇입니까? 현재 코드에서 오류가 발생했다는 말은하지 않았다.'pre-save' 함수 만 실행되지 않는다고했다. –

+0

그것은 '내부 서버 오류 500'을 던지고 그 외에는 아무 것도 던지지 않습니다. 내'pre save' 코드를 제거하면 모든 것이 잘 동작합니다. – Skywalker

관련 문제