2013-02-15 4 views
7

Dies ist eine peinlich Anfänger Frage, aber ich möchte nur meine Sorgen über Sequelizejs lösen. Ich möchte jedes Modell in eine eigene Datei aufteilen, um meine Quelle zu organisieren. Um das zu tun, muss ich am Anfang jeder Datei require("sequelize') und var sequelize = new Sequelize('DB-Name', 'DB-User', 'DB-Password');.Nodejs mit Sequelizejs mit separaten Dateien pro Modell

Meine Frage ist, wird das eine neue Verbindung zur Datenbank pro Modell erstellen, oder wird es immer wieder die gleiche Verbindung verwenden? Sollte ich das ganze Konzept "ein Modell pro Datei" aufgeben und einfach eine Master-Datei Models.js erstellen?

Ich bin sehr neu bei Node und bin immer noch an seine Konventionen gewöhnt. Danke für die Hilfe!

Antwort

10

Je nach Modell ist als eigenes Modul definiert, die Sie exportieren:

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

das Modul importieren Sie dann einfach, wenn Sie Sequelize initialisieren (und Sie können viele Modelle hier importieren):

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; 

Sie können mehr über Module bei http://nodejs.org/api/modules.htm lesen, aber das obige Beispiel sollte Ihnen den Anfang machen.

+2

Ich hatte gerade eine gute Lösung gefunden, sehr ähnlich zu dem, was Sie gepostet haben. Der einzige Unterschied ist, dass ich die Funktion 'sequelize.import (' ./ File ')' benutzt habe. So oder so funktioniert es! Danke für eine andere Alternative. – KayoticSully

0

Falls Sie den EcmaScript 6 Ansatz verwenden möchten, gibt es ein Beispiel mit einer Erklärung in der Sequelize Dokumentation 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 
    }) 
} 

Die Importmethode kann auch einen Rückruf als Argument akzeptieren.

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