Nodejs with Sequelizejs using separate files per model

心不动则不痛 提交于 2021-02-06 08:52:10

问题


This is an embarrassingly beginner question, but I just want to settle my worries about Sequelizejs. I want to split out each model into its own file to keep my source organized. In order to do that I need to require("sequelize') and var sequelize = new Sequelize('DB-Name', 'DB-User', 'DB-Password'); at the start of each file.

My question is, will that create a new connection to the database per model, or will it just keep re-using the same connection? Should I abandon the whole concept of "one model per file" and just create a master Models.js file?

I am very new to Node and am still getting used to its conventions. Thanks for the help!


回答1:


Every model is defined as its own module, which you export:

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

Then simply import the module when you initialize Sequelize (and you can import many models here):

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;

You can read up more on modules at http://nodejs.org/api/modules.htm but the example above should get you started.




回答2:


In case if one wants to use EcmaScript 6 approach there is great example with explanation in Sequelize documentation 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
  })
}

The import method can also accept a callback as an argument.

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


来源:https://stackoverflow.com/questions/14889055/nodejs-with-sequelizejs-using-separate-files-per-model

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!