2013-09-25 9 views
7

olsun ben ORM Sequelize kullanıyorum. E-posta geçerliyse.findOrCreate() hatası

globals.models.User.findOrCreate 
    username: "johny" 
    password: "pass" 
    email: "johny93[###]example.com" 
.success (user, created)-> 
    console.log user.values 
    res.send 200 
.error -> 
    console.log err # how to catch this? 
    res.send 502 

: Ben kullanıcıyı saklıyorum

### 
    User model 
### 
User = exports.User = globals.sequelize.define "User", 
    username: globals.Sequelize.STRING 
    email: 
     type: globals.Sequelize.STRING 
     validate: 
      isEmail: true 
    hash:  globals.Sequelize.STRING 
    salt:  globals.Sequelize.STRING(512) 
    fname: globals.Sequelize.STRING 
    lname: globals.Sequelize.STRING 
    country: globals.Sequelize.STRING 

: İşte benim kullanıcı modeli (e-posta: "[email protected]"), her şey iyi çalışıyor. Ancak e-posta doğrulamada başarısız olursa (yukarıdaki örnekte olduğu gibi), bir ekleme hatası alıyorum. Hata türü nasıl yakalanır? .error yöntemi, herhangi bir hata parametresi alamıyor.

+0

Eğer sequelize için SQL günlükleri açabilir miyim olurdu. Bu, hataya neden olan çalıştırmaya çalıştığınız sorguyu size verecektir. Daha önce benim için çalıştı olmasaydı neden de @Sriharsha Eğer –

cevap

7

sequelize hata fonksiyonuna parametrenin gibi hata geçirecektir.

JavaScript:

User.findOrCreate({username: "johny",password: "pass",email: "johny93[###]example.com"}) 
.success(function(user, created){ 
    console.log(user.values); 
    res.send(200); 
}) 
.error(function(err){ 
    console.log('Error occured' + err); 
}) 

coffeescript:

globals.models.User.findOrCreate 
    username: "johny" 
    password: "pass" 
    email: "johny93[###]example.com" 
.success (user, created)-> 
    console.log user.values 
    res.send 200 
.error (error)-> 
    console.log error # how to catch this? 
    res.send 502 
+0

teşekkür hatayı console.log amacıyla args dize specifiy gerektiğini doğrudur, ben açıklayamam. ER_TRUNCATED_WRONG_VALUE_FOR_FIELD: Yanlış tamsayı değeri: hata Örneğin bir dizgesi hata olsun 'sütun için 'satıra coreNumber' 1''. Hata kodu ve satır kimliği gibi nasıl alabilirim? Kullanıcı için hata göstermek için giriş hatalarını otomatik olarak ele almak gerekiyor. Yoksa DB'ye girmeden önce girişi manuel olarak doğrulamak daha mı iyi olacak? – f1nn

+0

o hata dize dışına 1 ER_TRUNCATED_WRONG_VALUE_FOR_FIELD çekin ve kürek bir regex arıyorsunuz? – dankohn

13
User.findOrCreate({ 
    where: { 
    username: "johny", 
    password: "pass", 
    email: "johny93[###]example.com" 
    }, 
    defaults: { 
    //properties to be created 
    } 
}).then(function(user){ 
    var created = user[1]; 
    user = user[0]; 
    console.log(user.values); 
}).fail(function(err){ 
    console.log('Error occured', err); 
}); 

https://github.com/sequelize/sequelize/wiki/Upgrading-to-2.0

DÜZENLEME: @Domi belirttiği gibi, daha iyi bir yol 'yaymak' kullanmak için içinde Ardından '

User.findOrCreate({ 
    where: { 
    username: "johny", 
    password: "pass", 
    email: "johny93[###]example.com" 
    }, 
    defaults: { 
    //properties to be created 
    } 
}).spread(function(user, created){ 
    console.log(user.values); 
}).fail(function(err){ 
    console.log('Error occured', err); 
}); 
+1

Paylaştığınız bağlantıya göre, bu kod çalışır, ancak birden çok bağımsız değişken döndüren yöntemlerle çalışmak için önerilen yöntem bu değildir. 'User' olarak adlandırdığınız diziyle (ancak kullanıcı değilsiniz) çalışmak için' findOrCreate' ile '' (userAndCreatedInOneArray) 'yerine' yay (kullanıcı, oluşturulan) 'yi kullanabilirsiniz. – Domi

+2

@Domi iyi bir nokta, cevabı – salexch

3

Sequelize 2.0 değişimler söz dizimi ve stead şimdi

User.findOrCreate({ 
    where: { 
    username: 'johny', 
    password: 'pass', 
    email: 'johny93[###]example.com' 
    } 
}).then(function (user) { 
    res.send(200); 
}).catch(function (err) { 
    console.log(err); 
    res.send(502); 
}); 
+2

Sequelize 3.0'da değiştirdim, kullanıcıya önerilir. Spread() http://docs.sequelizejs.com/en/latest/api/model/#findorcreateoptions-promiseinstance-created – Kad