I have a NodeJS server using Express. For my database, I use Sequelize, and I defined my models, for example, in the Sequelize documentation:
models / index.js
"use strict";
var fs = require("fs");
var path = require("path");
var Sequelize = require("sequelize");
var sequelize = new Sequelize('mydb', 'root', '', {
host: 'localhost',
dialect: 'mysql',
pool: {
max: 5,
min: 0,
idle: 10000
}
});
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;
db.Sequelize = Sequelize;
module.exports = db;
models / server.js
"use strict";
module.exports = function(sequelize, DataTypes) {
var Server = sequelize.define('Server', {
id: {
type: DataTypes.INTEGER,
primaryKey: true,
autoIncrement: true,
unique: true,
allowNull: false
},
reference: DataTypes.STRING,
name: DataTypes.STRING
},
{
timestamps: false,
paranoid: false,
underscored: true,
freezeTableName: true,
tableName: 'server'
});
return Server;
};
models / subscriber.js
"use strict";
module.exports = function(sequelize, DataTypes) {
var Subscriber = sequelize.define('Subscriber', {
id: {
type: DataTypes.INTEGER,
primaryKey: true,
autoIncrement: true,
unique: true,
allowNull: false
},
type: {
type: DataTypes.ENUM,
values: ['email', 'phone']
},
contact: DataTypes.STRING,
server_id: DataTypes.INTEGER,
notified: DataTypes.INTEGER,
last_notified: DataTypes.DATE
},
{
timestamps: false,
paranoid: false,
underscored: true,
freezeTableName: true,
tableName: 'subscriber',
classMethods: {
associate: function(models) {
Subscriber.belongsTo(models.Server, { foreignKey: 'server_id', targetKey: 'id' });
}
}
});
return Subscriber;
};
And here is my route:
var models = require('../models');
app.get('/subscribe/:type/:contact/:ref', function(req, res) {
var type = req.params.type;
var contact = req.params.contact;
var ref = req.params.ref;
models.Subscriber.findAll().then(function(result) {
console.log(result);
});
res.render('full/subscribed.twig', {
type: type,
contact: contact,
server : server
});
});
And when I access my route, I have this error message:
Unhandled rejection TypeError: Cannot read property '_isSequelizeMethod' of undefined
at /Users/me/Projects/nodejs/myproject/node_modules/sequelize/lib/dialects/abstract/query-generator.js:1077:20
at Array.map (native)
at Object.QueryGenerator.selectQuery (/Users/me/Projects/nodejs/myproject/node_modules/sequelize/lib/dialects/abstract/query-generator.js:1067:55)
at QueryInterface.select (/Users/me/Projects/nodejs/myproject/node_modules/sequelize/lib/query-interface.js:669:25)
at null.<anonymous> (/Users/me/Projects/nodejs/myproject/node_modules/sequelize/lib/model.js:1398:32)
at tryCatcher (/Users/me/Projects/nodejs/myproject/node_modules/bluebird/js/release/util.js:16:23)
at Promise._settlePromiseFromHandler (/Users/me/Projects/nodejs/myproject/node_modules/bluebird/js/release/promise.js:510:31)
at Promise._settlePromise (/Users/me/Projects/nodejs/myproject/node_modules/bluebird/js/release/promise.js:567:18)
at Promise._settlePromise0 (/Users/me/Projects/nodejs/myproject/node_modules/bluebird/js/release/promise.js:612:10)
at Promise._settlePromises (/Users/me/Projects/nodejs/myproject/node_modules/bluebird/js/release/promise.js:691:18)
at Async._drainQueue (/Users/me/Projects/nodejs/myproject/node_modules/bluebird/js/release/async.js:133:16)
at Async._drainQueues (/Users/me/Projects/nodejs/myproject/node_modules/bluebird/js/release/async.js:143:10)
at Immediate.Async.drainQueues [as _onImmediate] (/Users/me/Projects/nodejs/myproject/node_modules/bluebird/js/release/async.js:17:14)
at processImmediate [as _immediateCallback] (timers.js:383:17)
I tried to make some impression of the independent NodeJS file, and everything works fine, I just run my standalone js file with some actions in the database, and everything is fine. When I do the same on my express route, I have this error ...
Does anyone have an idea why?
Thanks in advance, Steve