2016-08-02 2 views
1

express.js와 함께 sequelize.js를 사용하십시오.sequelize.js로 대체 작업을 만드는 방법은 무엇입니까?

모델의 기존 인스턴스를 새 인스턴스로 바꿔야합니다. 모든 필수 필드가 있는지 확인하기 위해 대체 인스턴스를 저장하기 전에 새 인스턴스의 유효성을 검사해야합니다. 그러나 validate()은 예상대로 작동하지 않습니다. 다음 예제에서는 req.bodyrequiedId이 누락되었습니다. 새 location을 만들고 req.body에서 someAttribute을 설정하고 validate()으로 전화하십시오. requiredId가 누락되어 모델에 allowNull: false으로 정의되어 있기 때문에 유효성 검사 오류가 발생할 것으로 예상됩니다. 이것은 사실이 아니며 업데이트가 행복하게 실행됩니다. 내가 수동으로 requiredId에 대한 null 값을 추가하는 경우 예상대로

sequelize.define('location', { 
locationId: { 
    type: DataTypes.STRING, 
    allowNull: false, 
    primaryKey: true, 
}, 
requiredId: { 
    type: DataTypes.INTEGER, 
    allowNull: false, 
}, 
someAttribute: { 
    type: DataTypes.STRING, 
    defaultValue: 'baz' 
}); 

var location; 
models.location.findById(locationId) 
    .then(function (data) { 
     location = data; 
     var replacement = models.location.build({}); 

     // req.body = { someAttribute: 'value' } 
     _.assign(replacement, req.body); 

     return replacement.validate() 
      .then(function() { 
       return location.update(replacement.toJSON()); 
      }); 
    } 
}) 
.then(function() { 
    res.send('success'); 
}) 
.catch(function (err) { 
    res.status(400).send({ error:err }); 
}); 

는 다음 유효성 검사 오류가 발생합니다.

_.assign(replacement, req.body, { requiredId: null }); 
replacement.validate().catch(function (err) { 
    // now I hit it 
}) 

내가 모델의 새로운 인스턴스를 구축하고 때, sequelize이 설정되지 않은 필드를 확인하지 않는 것 같습니다.

replace 함수를 구현하여 구현하는 적절한 방법은 무엇입니까? 이전 인스턴스는 필수 필드와 선택적 필드에 대한 명시 적 값 또는 기본값을 포함하는 새 오브젝트로 대체되어야합니다.

var original = { locationId: 1, requiredId: 2, someAttribute: 'foo'}; 
var new = { locationId: 1, requiredId: 3}; 
models.location.replace(new); 
// => { locationId: 1, requiredId: 3, someAttribute: 'baz' } 

답변

0

밝혀졌습니다. validate() 호출 방법에 대해 혼란스러워했습니다. 약속의 일부인 catch()에 유효성 오류가 발생할 것으로 예상했습니다. 그러나 validate()을 직접 호출하면 유효성 검증 오류가 콜백 인수로 리턴됩니다.

관련 문제