2012-08-29 4 views
0

개체를 함수로 전달한 후 해당 값이있는 DB 항목을 저장하고 옵션을 기본값으로 저장하려고합니다. 실용적인 측면에서 몽구스/노드에 객체를 저장 (기본값)

...

내가 몽구스이 같은 스키마를 가지고 :

exports.Logger = function(logEntry){ 
    var Log = mongoose.model("Log"), 
     req = logEntry.req; 

    log = new Log(); 

    // Sorts out log.reqInfo 
    if (logEntry.req){ 
    log.reqInfo = JSON.stringify({ 
     info : req.info, 
     headers: req.headers, 
     method : req.method, 
     body :req.body, 
     route :req.route, 
     params: req.params  
    }); 
    } else { 
    logEntry.reqInfo = {}; 
    } 

    // Sorts out all of the other fields with sane defaults. 
    // FIXME: improve this code, it's grown into something ugly and repetitive 
    log.workspaceId = logEntry.workspaceId ? logEntryworkspaceId. : ''; 
    log.workspaceName = logEntry.workspaceName ? logEntry.workspaceName : ''; 
    log.loginSession = logEntry.loginSession ? logEntry.loginSession : ''; 
    log.loginToken = logEntry.loginToken ? logEntry.loginToken : ''; 
    log.logLevel = logEntry.logLevel ? logEntry.logLevel : 0; 
    log.errorName = logEntry.errorName ? logEntry.errorName : ''; 
    log.message = logEntry.message ? logEntry.message : ''; 
    log.data = logEntry.data ? logEntry.data : {}; 

    // Sorts out log.loggedOn 
    log.loggedOn = new Date(); 
    log.save(); 
} 

이 :

var Log = new Schema({ 
    workspaceId : { type: String, index: true }, 
    workspaceName : { type: String, index: true }, 
    loginSession : { type: String, index: true }, 
    loginToken  : { type: String, index: true }, 
    logLevel  : { type: Number, enum:[0,1] }, 
    errorName  : { type: String, index: true }, 
    message  : { type: String, index: true }, 
    reqInfo  : { type: String }, 
    data   : { type: String }, 
    loggedOn  : { type: Date, index: true }, 
}); 
mongoose.model('Log', Log); 

이 테이블에 일을 작성하려면, 내가 좋아하는 뭔가를 절대적으로 끔찍한 코드입니다. 반복없이 그것을 쓰는 더 좋은 방법은 무엇입니까? 이 같은

+0

에서

var Log = new Schema({ workspaceId : { type: String, index: true, default: 'your default here' }, //... loggedOn : { type: Date, index: true, default: Date.now } }); 

는 –

+0

코드를 개선하기 위해 질문 :(으로 올바른 허용하지 않습니다, 몽구스 솔루션을 요청합니다 몽구스 답을 얻을, 몽구스에만 thereason 내가 원한다면, 그것을 개선하고 싶어하는 이유 Mongoose에서 기본값을 수행하는 방법을 알았 으면 다른 제목을 가졌을 것입니다.이 코드를 개선하는 방법에 대해 물어 보았습니다. 개선 할 필요가없는 방법이 아니 었습니다. – Merc

+0

"자바 스크립트에서 개체를 병합하는 방법"이었습니까? –

답변

1

뭔가 좀 더 우아한 수 있습니다 :

일부 값

values = { 
    workspaceName: 'WNAME1', 
    loginSession: 'LS1', 
    somethingElse: 'qux' 
}; 

console.log(values) 

감안할 때 기본값

defaults = { 
    workspaceName: 'foo', 
    loginSession: 'bar', 
    loginToken: 'baz' 
}; 

console.log(defaults) 

이 포함 된 사전을 만들기 값 항목을 포함하지 않는 경우 지정된 기본값에 대해 값에 기본값을 추가하십시오.

for(i in defaults){ 
    if(!values[i]){ 
    values[i] = defaults[i]; 
    } 
} 

console.log(values) 
+0

나는 노드가 뭔가 준비가되어 있기를 바랐다 ...하지만 분명히 그렇지 않다! 고맙다, 대답은 받아 들여진다. – Merc

+1

jQuery에는 mak 객체를 쉽게 병합합니다. 여기에 몇 개의 노드 포트가 있습니다 (어느 것도 사용하지 않았습니다). 예 : https://github.com/dreamerslab/node.extend. 스키마에서 기본값을 사용하는 Tilman의 대답은 아마도 몽구스 특정 솔루션에 더 좋습니다. – wdavo

+0

밑줄의 _.extend()가 이것을 위해 사용합니다. – grantwparks

10

코드를 이해하지 못합니다. 따라서 값이 설정되지 않은 경우 빈 문자열 ''으로 설정하겠습니까?

기본값을 원하면 가장 쉬운 방법은 스키마에서 정의하는 것입니다. docs

관련 문제