2015-10-24 19 views
6

Otrzymuję błąd Unhandled rejection TypeError: feed.create is not a function i nie mogę zrozumieć, dlaczego tak się dzieje. Jaki jest problem?sequelize. Tworzenie nie jest błędem funkcji

Oto mój kod. Prawdopodobnie nie robię tutaj czegoś bardzo podstawowego, ponieważ nie mogę osiągnąć zmiennej pliku danych w routes/index.js.

Jeśli dodaję moduł.exports = kanał; do pliku moich modeli mogę go osiągnąć, ale mam więcej niż jeden model, więc jeśli dodaję dodatkowe modele poniżej kanału, to go przesłonię.

db.js

var Sequelize = require('sequelize'); 
var sequelize = new Sequelize('mydatabase', 'root', 'root', { 
    host: 'localhost', 
    dialect: 'mysql', 
    port: 8889, 

    pool: { 
     max: 5, 
     min: 0, 
     idle: 10000 
    }, 
    define: { 
     timestamps: false 
    } 
}); 

var db = {}; 
db.sequelize = sequelize; 
db.Sequelize = Sequelize; 
module.exports = db; 

models.js

var db = require('./db'), 
    sequelize = db.sequelize, 
    Sequelize = db.Sequelize; 

var feed = sequelize.define('feeds', { 
    subscriber_id: Sequelize.INTEGER, 
    activity_id: Sequelize.INTEGER 
}, 
{ 
    tableName: 'feeds', 
    freezeTableName: true 
}); 

trasy/index.js

var express = require('express'); 
var router = express.Router(); 
var models = require('../models'); 

router.get('/addfeed', function(req,res) { 
    sequelize.sync().then(function() { 
     return feed.create({ 
      subscriber_id: 5008, 
      activity_id : 116 
     }); 
    }).then(function (jane) { 
     res.sendStatus(jane); 
    }); 
}); 

Odpowiedz

11

Nie można dotrzeć do zmiennej z pliku, tylko przez wymagające go w inny. Musisz zdefiniować literał obiektu, aby przechowywać wszystkie zmienne w jednym miejscu i przypisać je do module.exports, lub musisz zaimportować je z różnych plików osobno.

W twoim przypadku utworzę osobne pliki do przechowywania schematów tabel, a następnie zaimportuję je pod sequelize.import w jednym pliku, a następnie wymagam tego pliku.

Jak to:

Modele/index.js:

var sequelize = new Sequelize('DBNAME', 'root', 'root', { 
    host: "localhost",   
    dialect: 'sqlite',   

    pool:{ 
    max: 5, 
    min: 0, 
    idle: 10000     
    }, 

    storage: "SOME_DB_PATH" 
}); 

// load models     
var models = [     
    'Users',    
]; 
models.forEach(function(model) { 
    module.exports[model] = sequelize.import(__dirname + '/' + model); 
}); 

modele/Users.js

var Sequelize = require("sequelize"); 

module.exports=function(sequelize, DataTypes){ 
    return Users = sequelize.define("Users", { 
    id: { 
     type: DataTypes.INTEGER, 
     field: "id",    
     autoIncrement: !0,  
     primaryKey: !0 
    }, 
    firstName: {    
     type: DataTypes.STRING, 
     field: "first_name"  
    }, 
    lastName: {     
     type: DataTypes.STRING, 
     field: "last_name"  
    }, 
    }, { 
    freezeTableName: true, // Model tableName will be the same as the model name 
    classMethods:{ 

     } 
    }, 
    instanceMethods:{ 

     } 
    } 
    }); 
}; 

następnie zaimportować każdego modelu takiego:

var Users = require("MODELS_FOLDER_PATH").Users;

Mam nadzieję, że to pomoże.

+1

Podążałem za tym, otrzymuję komunikat "Nie mogę odczytać właściwości" wszystkich "niezdefiniowanych" –

Powiązane problemy