2016-05-10 22 views
6

db:seed:all ile bir saatten uzun bir süredir mücadele ediyorum ve bu konuda yavaş yavaş aklımı kaybediyorum.Sequelize-CLI Fideleri - undefined'in özelliği okunamıyor

'use strict'; 
module.exports = function (sequelize, DataTypes) { 
    var Car = sequelize.define('Cars', { 
    name: DataTypes.STRING, 
    type: DataTypes.INTEGER, 
    models: DataTypes.INTEGER 
    }, { 
     classMethods: { 
     associate: function (models) { 
      // associations can be defined here 
     } 
     } 
    }); 
    return Car; 
}; 

bu bir göç olduğunu ve gayet iyi çalışıyor sequelize db:migrate kullanarak veritabanına gider:

ben basit bir model var.

Sonraki Bir tohum dosyası aracılığıyla 2 araba eklemek istedim. Yani komut sequelize seed:create --name insertCars koştu ve bulkInsert eklendi: Ben hata aşağıdaki almak sequelize db:seed:all çalıştırdığınızda Şimdi

'use strict'; 

module.exports = { 
    up: function (queryInterface, Sequelize) { 
    return queryInterface.bulkInsert(
     'Cars', 
     [ 
     { 
      name: "Auris", 
      type: 1, 
      models: 500, 
      createdAt: Date.now(), updatedAt: Date.now() 
     }, 
     { 
      name: "Yaris", 
      type: 1, 
      models: 500, 
      createdAt: Date.now(), updatedAt: Date.now() 
     } 
     ] 
    ); 
    }, 

    down: function (queryInterface, Sequelize) { 
    } 
}; 

:

Loaded configuration file "config\config.json". 
Using environment "development". 
== 20160510132128-insertCars: migrating ======= 
Seed file failed with error: Cannot read property 'name' of undefined 

herkes bu ekme çalışan herhangi deneyimi var mı?

{ 
    "development": { 
    "username": "mydbdude", 
    "password": "mydbdude", 
    "database": "Cars", 
    "host": "127.0.0.1", 
    "dialect": "mssql", 
    "development": { 
     "autoMigrateOldSchema": true 
    } 
    }, 
    ....other configs 
} 

DÜZENLEME: db Çıktı: Bilgin burada benim yapılandırma dosyasıdır göç Hala bu çalışma almak için edemedik yana

Sequelize [Node: 5.9.1, CLI: 2.4.0, ORM: 3.23.0] 

Loaded configuration file "config\config.json". 
Using environment "development". 
No migrations were executed, database schema was already up to date. 
+0

Merhaba, "sequelize db: migrate" terminal çıktısını gösterebilir misiniz? – paolord

+0

@paolord Orijinal sorumu düzenledim ve çıktıyı db'den aldım: – Tikkes

+0

'un alt kısmındaki geçişi hangi DB ağını kullanıyorsunuz? Postgres ve büyük/küçük harf duyarlı isimlerle ilgili sorunlar yaşadım (yani, '' Cars' '' cars' table postgres '') –

cevap

0

, ben, şimdi o zaman, Benim çözüm göndermek hangi oldukça iyi çalışır ama özel olarak inşa kullanılır.

İlk olarak, tohumlamak istediğim nesneyi içeren bir JSON dosyası oluşturdum. yani

dataSources: [ 
    { 
     name: 'Pattern' 
    }, 
    { 
     name: 'Upload' 
    } 
] 

Sonra, ben

var models = require('./../models'), 
sql = models.sequelize, 
Promise = models.Sequelize.Promise; 

var objects = require('./seed/objects'), //this is where my object file is 
dataSources = objects.dataSources; 


var express = require('express'); 

var seedDatabase = function() { 
    var promises = []; 
    promises.push(createDataSources()); 
    //more can be added to the promises 

    return Promise.all(promises); 
}; 

function createDataSources() { 
    return models.sequelize 
     .transaction(
      { 
       isolationLevel: models.sequelize.Transaction.ISOLATION_LEVELS.READ_COMMITTED 
      }, 
      function (t) { 
       return models.DataSource 
        .findAll({ 
         attributes: [ 
          'id' 
         ] 
        }) 
        .then(function (result) { 
         if (!result || result.length == 0) { 
          return models.DataSource 
           .bulkCreate(dataSources, { transaction: t }) 
           .then(function() { 
            console.log("DataSources created"); 
           }) 
         } 
         else { 
          console.log("DataSources seeder skipped, already objects in the database..."); 
          return; 
         } 
        }); 
      }) 
     .then(function (result) { 
      console.log("DataSources seeder finished..."); 
      return; 
     }) 
     .catch(function (error) { 
      console.log("DataSources seeder exited with error: " + error.message); 
      return; 
     }); 
}; 

module.exports = { 
    seedDatabase: seedDatabase 
} 

Artık tüm bu kurulum yapılır aşağıdaki (tabii kısaltılmış olanı) içeren başvurumun sunucu tarafında bir seeder.js uygulayan, bunu kullanabilir başvurum şöyle, benim ekme makinesi çalıştırmak için başlar seedDatabase fonksiyonu:

//includes and routes above, not interesting for this answer 
try { 
    umzug.up().then(function (migrations) { 
     for (var i = 0; i < migrations.length; i++) { 
      console.log("Migration executed: " + migrations[i].file); 
     } 

     console.log("Running seeder"); 
     seeder.seedDatabase().then(function() { //here I run my seeders 
      app.listen(app.get('port'), function() { 
       console.log('Express server listening on port ' + app.get('port')); 
      }); 
     }); 
    }); 
} 
catch (e) { 
    console.error(e); 
} 

şimdi, bu kadar, Uygulamanızı çalıştırdığınızda, eğer nesneleriniz zaten veritabanına eklenmişse, ekme makinesi veritabanını kontrol edecektir. Eğer öyleyse, ekim makinesi atlanır, değilse takılırlar.

Umarım bu size yardımcı olur.