Igor Martins
Igor Martins

Reputation: 2047

sequelize is not defined - Sequelize and consign

I'm new in node.

I'm trying to add Sequelize in my simple application with cosign.

config/db.js

var Sequelize = require('sequelize');

var sequelize = new Sequelize('test', 'root', '', {

host: 'localhost',
dialect: 'mysql',

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

});

module.exports = function () {
return sequelize
}

model/user.js

var Sequelize = require('sequelize');

module.exports = function(application, req, res){

var User = sequelize.define('user', {
username: {
type: Sequelize.STRING,
}
}, {
freezeTableName: true // Model tableName will be the same as the model name
});

User.create({ username: 'fnord'})
.then(function() {
console.log('criado!');
})
}

config/server.js

...
consign()
.include('app/routes')
.then('config/db.js')
.then('app/models')
.then('app/controllers')
.into(app);

module.exports = app;

I'm getting the error sequelize is not defined´ onvar User = sequelize.define('user', {`

What I'm doing wrong?

Upvotes: 3

Views: 35558

Answers (4)

Dev InforMaikson
Dev InforMaikson

Reputation: 1

In my case I had this error when I used an invalid type in migration. Assuming this could be the problem and removing the invalid type from the migration it worked again.

Upvotes: 0

Justin Rice
Justin Rice

Reputation: 1301

The Sequelize-CLI is a very useful tool for projects that use Sequelize. When you download it

npm install -g sequelize-cli

You can then run

sequelize init

The above command will go and write out a few folders for you including a models folder that has the index file that Ricardo created above. This gives some really cool environment configuration as well. Within the new models folder, you can create a new file with your object with the syntax...

module.exports = function(sequelize, DataTypes) {
  var User = sequelize.define("User", {
    username: {
      type: DataTypes.STRING
    }, 
    {
      freezeTableName: true // Model tableName will be the same as the model name 
    }
  });

  return User;
}

While I do like this as a tool. It is key here to notice that Sequelize will go and look for the first argument to the define() method. So we could just write

module.exports = function(sequelize, DataType){
return sequelize.define("User", {
    username: {
      type: DataTypes.STRING
    }, 
    {
      freezeTableName: true // Model tableName will be the same as the model name 
    }
  });

Upvotes: 0

Ricardo Machado
Ricardo Machado

Reputation: 782

Create an index.js file inside your moldes folder like this:

"use strict";

var fs        = require("fs");
var path      = require("path");
var Sequelize = require("sequelize");

var sequelize = new Sequelize(global.config.dbConfig.name, global.config.dbConfig.user, global.config.dbConfig.password, {
  host: global.config.dbConfig.host,
  port: global.config.dbConfig.port,
  pool: false
});

var db = {};

fs.readdirSync(__dirname)
  .filter(function(file) {
    return (file.indexOf(".") !== 0) && (file !== "index.js");
  })
  .forEach(function(file) {
    var model = sequelize.import(path.join(__dirname, file));
    db[model.name] = model;
  });

Object.keys(db).forEach(function(modelName) {
  if ("associate" in db[modelName]) {
    db[modelName].associate(db);
  }
});

db.sequelize = sequelize;

module.exports = db;

and in your user.js do something like this:

module.exports = function(sequelize, DataTypes) {
  var User = sequelize.define("User", {
    username: {
      type: DataTypes.STRING
    }, 
    {
      freezeTableName: true // Model tableName will be the same as the model name 
    }
  });

  return User;
}

http://docs.sequelizejs.com/en/1.7.0/articles/express/

Upvotes: 3

Yrysbek Tilekbekov
Yrysbek Tilekbekov

Reputation: 2775

You should require sequelize instance into user model

config/db.js

module.exports = sequelize;

model/user.js

var Sequelize = require('sequelize');
var sequelize = require('../config/db.js'); //sequelize instance

module.exports = function(application, req, res){

var User = sequelize.define('user', { 
...

Upvotes: 1

Related Questions