2015-10-24 16 views
6

Sto ricevendo l'errore Unhandled rejection TypeError: feed.create is not a function e non riesco a capire perché si verifica. Qual è il problema qui?sequelize .create non è un errore di funzione

Ecco il mio codice. Probabilmente non sto facendo qualcosa di fondamentale qui dato che non posso raggiungere la variabile feed in routes/index.js.

Se aggiungo module.exports = feed; al mio file di modelli, posso raggiungerlo, ma ho più di un modello, quindi se aggiungo altri modelli sotto il feed, lo sostituiscono.

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

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

risposta

11

Non è possibile raggiungere una variabile da un file, da solo richiedendo in un altro. È necessario definire un oggetto letterale per contenere tutte le variabili in un unico posto e assegnarlo a module.exports oppure è necessario importarle separatamente da file diversi.

Nel tuo caso, vorrei creare file separati per conservare gli schemi di tabella, e quindi importarli per sequelize.import sotto un file, quindi richiedere quel file.

Ti piace questa:

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

modelli/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:{ 

     } 
    } 
    }); 
}; 

Poi importare ogni modello come questo:

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

Spero che questo aiuti.

+1

Ho seguito questo sto ricevendo errore 'Impossibile leggere la proprietà 'tutti' di indefinito' –

Problemi correlati