2013-11-02 191 views
3

我有這將是場兩個對象(無論是存儲信用卡或給定信用卡)之一:貓鼬或模式驗證

payment_method: 
    cc_token: String 
    security_code: String 
    payment_method: 
    number: String 
    security_code: String 
    expiration_month: Number 
    expiration_year: Number 
    billing_address: 
     _type: String 
     first_name: String 
     last_name: String 
     address_line1: String 
     address_line2: String 
     zip_code: String 
     city: String 
     state: String 
     phone_number: String 

我知道傳遞的數據是要匹配的其中之一,但不是兩者。有沒有爲驗證指定某種OR構造的方法?

+0

數據如何「通過?」你如何確定哪些是運行時? – WiredPrairie

回答

1

您沒有提供包含模式的示例,但有多種驗證方法。

我做的一件事就是爲Schema指定了「混合」類型,允許任何類型用於可能包含任一類型的字段。

function validatePaymentMethod(value) { 
    if (!value) { return false; } 
    // put some logic that checks for valid types here... 
    if (value.cc_token && value.billing_address) { 
    return false; 
    } 
    return true; 
} 

var OrderSchema = new mongoose.Schema({ 
    payment_method : { type: mongoose.Schema.Types.Mixed, 
        validate: [validatePaymentMethod, 'Not valid payment method'] } 
}); 

var Order = mongoose.model("Order", OrderSchema); 
var o = new Order(); 
o.payment_method = { cc_token: 'abc', billing_address: 'Street' }; 
o.validate(function(err) { 
    console.log(err); 
}); 

其他文件記錄here