2016-05-10 11 views
6

Od ponad godziny borykam się z db:seed:all i powoli tracę zdanie na ten temat.Siewniki Sequelize-CLI - Nie można odczytać właściwości niezdefiniowanej

mam prosty model:

'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; 
}; 

to w migracji i idzie do bazy danych przy użyciu sequelize db:migrate które działa prawidłowo.

Następnie chciałem wstawić - przez plik nasion - 2 samochody. Więc wpadłem polecenia sequelize seed:create --name insertCars i dodaje bulkInsert:

'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) { 
    } 
}; 

Teraz gdy uruchamiam sequelize db:seed:all mi się następujący błąd:

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

Czy ktoś ma jakieś doświadczenia z eksploatacji tych siewniki? Dla Twojej informacji tutaj jest mój plik konfiguracyjny:

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

EDIT: Wyjście z db: migrować

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

Witam, czy możesz pokazać wyjście terminala 'sequelize db: migrate'? – paolord

+0

@paolord Zmieniłem moje oryginalne pytanie i dodałem dane wyjściowe z db: migracja na dole – Tikkes

+0

jakiego dialera DB używasz? Miałem problemy z Postgresem i nazwami rozróżniającymi duże i małe litery (np. 'Cars' vs. tablica' cars' table postgres tworzy) –

Odpowiedz

0

Ponieważ nadal nie udało się uzyskać tej pracy, mam teraz czasu, opublikuj moje rozwiązanie, którego użyłem, które działa raczej dobrze, ale jest niestandardowe.

Najpierw utworzyłem plik JSON zawierający obiekt, który chcę zasiać. tj

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

Następnie, wdrożyliśmy seeder.js na stronie serwera mojego wniosku zawierającego następujące (wersja przyciętego oczywiście)

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 
} 

Teraz cała ta konfiguracja jest zrobione, mogę to wykorzystać seedDatabase funkcja kiedy moja aplikacja uruchamia aby uruchomić mój siewnik, tak:

//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); 
} 

to wszystko, teraz, kiedy cię uruchom swoją aplikację, siewnik sprawdzi bazę danych, jeśli którykolwiek z twoich obiektów jest już wstawiony do bazy danych. Jeśli tak, siewnik jest pomijany, jeśli nie, to są one wstawiane.

Mam nadzieję, że to ci pomoże.

Powiązane problemy