2013-02-15 11 views
7

Questa è una domanda imbarazzante per principianti, ma voglio solo risolvere le mie preoccupazioni su Sequelizejs. Voglio dividere ogni modello in un proprio file per mantenere organizzata la mia fonte. Per fare ciò ho bisogno di require("sequelize') e var sequelize = new Sequelize('DB-Name', 'DB-User', 'DB-Password'); all'inizio di ogni file.Nodejs con Sequelizejs che utilizza file separati per modello

La mia domanda è, creerà una nuova connessione al database per modello, o continuerà a riutilizzare la stessa connessione? Dovrei abbandonare l'intero concetto di "un modello per file" e creare semplicemente un file Models.js master?

Sono molto nuovo a Node e mi sto ancora abituando alle sue convenzioni. Grazie per l'aiuto!

risposta

10

Ogni modello è definito come un proprio modulo, che si esporta:

module.exports = function(sequelize, DataTypes){ 
    return sequelize.define('Brand', { 
     name: { 
      type: DataTypes.STRING, 
      unique: true, 
      allowNull: false }, 
     description: { 
      type: DataTypes.TEXT, 
      allowNull: false }, 
     status: { 
      type: DataTypes.INTEGER, 
      unique: false, 
      allowNull: true } 
    }) 
}; 

Poi basta importare il modulo quando si inizializza Sequelize (ed è possibile importare molti modelli qui):

var Sequelize = require("sequelize"); 
var config = require("../../config/config.js"); 
var sequelize = new Sequelize(config.database, config.username, config.password, 
    { dialect: config.dialect, host: config.host, port: config.port, 
     omitNull: true, logging: false }); 
var Brand = require("./Brand").Brand; 

Puoi leggere di più sui moduli allo http://nodejs.org/api/modules.htm ma l'esempio sopra dovrebbe iniziare.

+2

Avevo appena trovato una buona soluzione molto simile a quello che hai postato. L'unica differenza è che ho fatto uso della funzione 'sequelize.import ('./ File')'. In entrambi i casi funziona comunque! Grazie per un'altra alternativa. – KayoticSully

0

Se si desidera utilizzare l'approccio EcmaScript 6, è disponibile un esempio di griglia con spiegazione in Sequenza di documentazione here.

// in your server file - e.g. app.js 
const Project = sequelize.import(__dirname + "/path/to/models/project") 

// The model definition is done in /path/to/models/project.js 
// As you might notice, the DataTypes are the very same as explained above 
module.exports = (sequelize, DataTypes) => { 
    return sequelize.define("project", { 
    name: DataTypes.STRING, 
    description: DataTypes.TEXT 
    }) 
} 

Il metodo di importazione può anche accettare un callback come argomento.

sequelize.import('project', (sequelize, DataTypes) => { 
    return sequelize.define("project", { 
    name: DataTypes.STRING, 
    description: DataTypes.TEXT 
    }) 
}) 
Problemi correlati