2016-01-19 17 views
6

Mongoose Boolean doğrulaması, girişimi kolaylaştırmak için Belirli bir alan true olarak ayarlanmışsa, bir mongoose belgesinin oluşturulmasını sağlamaya çalıştım (Bu alan, Elbette her zaman doğru, belgenin doğru bir şekilde oluşturulmuş olması durumunda, bu raporlama nedenleri içindir). Mongoose Bir dize sağlanırsa

Bu

basitleştirilmiş poc geçerli:

var mongoose = require('mongoose') 
mongoose.connect('mongodb://localhost:27017/playground') 

var Schema = mongoose.Schema 

var TestSchema = new Schema({ 
    testField: { 
    type: Boolean, 
    required: true 
    } 
}) 

// Try to ensure, that testField can only be true 
TestSchema 
    .path('testField') 
    .validate(function (testField) { 
    return (testField === true || testField === 'true') 
    }, 'Test-field must be true!'); 

var Test = mongoose.model('test', TestSchema); 


var newDoc = Test({ 
    testField: 'some random string' 
}) 

newDoc.save(function (err, newDoc) { 
    (err) ? console.log(err): console.log('newDoc was created') 
}) 

sorun olduğunu ben bir Boole değeri yerine rastgele bir dize tedarik veya am rağmen "Boole dize" (örneğin "yanlış" ya da "doğru" yerine, olduğu Sadece yanlış/doğru), belge doğru olarak ayarlanmış halde, belge hala düzgün şekilde kaydediliyor.

"False" (Yanlış) ya da false sağlarım durumunda doğrulama doğru şekilde çalışır ve bir hata verir.

Görünüşe göre, doğrulamadan (ve görünüşe göre varsayılan eylemler) gerçekte çağrılmadan önce bir tür tip dökümü var. Onaylamamı düzeltmem için bir yol var mı, yoksa Mongoose-Object'i oluşturmadan önce nesneyi açıkça kontrol etmem gerekiyor mu?

Bu fongozozdur 4.3.6.

+0

gibi doğrulayabilir? Tüm özellik türleri ile doğrulamadan önce aynı tür zorlama olur ... – Codepunkt

+1

Hayır, henüz değil. Sadece bir geçici çözüm, ben şema onaylama geçmeden önce dizeyi ayrıştırmak/doğrulamak ... – BenSower

+0

İki kat doğrulama vaat ediyorum. Veritabanındaki veritabanını mongoose kullanarak ve son nokta katmanındaki girişi doğrulamak için bir tane dezenfekte etmek. Doğrulama mantığını yeniden kullanmaya çalışıyorum. Yine de hoşlanma. İki kat doğrulama işlemine gerçekten ihtiyaç duyarsak hala emin değilim. – Codepunkt

cevap

0

sen String tipi Boole değiştirmek ve henüz bir çözüm bulmak muydunuz

 testField: { 
      type : String, 
      required: true, 
      validate: { 
       validator: function (value) { 
        return value === "true" 
       }, 
       message: 'Field must be true' 
      } 
     }