Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript NodeJS Sequelize-无法读取属性'_isSequelizeMethod';未定义的_Javascript_Node.js_Express_Sequelize.js - Fatal编程技术网

Javascript NodeJS Sequelize-无法读取属性'_isSequelizeMethod';未定义的

Javascript NodeJS Sequelize-无法读取属性'_isSequelizeMethod';未定义的,javascript,node.js,express,sequelize.js,Javascript,Node.js,Express,Sequelize.js,我有一个使用Express的NodeJS服务器。 对于我的数据库,我使用Sequelize,我在Sequelize文档中定义了我的模型: models/index.js "use strict"; var fs = require("fs"); var path = require("path"); var Sequelize = require("sequelize"); var sequelize = new Sequelize('mydb', 'root', '

我有一个使用Express的NodeJS服务器。 对于我的数据库,我使用Sequelize,我在Sequelize文档中定义了我的模型:

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;
};
这是我的路线:

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
        });
    });
当我访问我的路线时,我会收到以下错误消息:

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)
未处理的拒绝类型错误:无法读取未定义的属性“\u isSequelizeMethod”
at/Users/me/Projects/nodejs/myproject/node_modules/sequelize/lib/dialogs/abstract/query generator.js:1077:20
at Array.map(本机)
在Object.QueryGenerator.selectQuery(/Users/me/Projects/nodejs/myproject/node_modules/sequelize/lib/dialogs/abstract/QueryGenerator.js:1067:55)
在QueryInterface.select(/Users/me/Projects/nodejs/myproject/node_modules/sequelize/lib/query interface.js:669:25)
在空。(/Users/me/Projects/nodejs/myproject/node_modules/sequelize/lib/model.js:1398:32)
在tryCatcher(/Users/me/Projects/nodejs/myproject/node_modules/bluebird/js/release/util.js:16:23)
在Promise._settlePromiseFromHandler(/Users/me/Projects/nodejs/myproject/node_modules/bluebird/js/release/Promise.js:510:31)
在Promise._结算Promise(/Users/me/Projects/nodejs/myproject/node_modules/bluebird/js/release/Promise.js:567:18)
在Promise._settlePromise0(/Users/me/Projects/nodejs/myproject/node_modules/bluebird/js/release/Promise.js:612:10)
在Promise._结算Promises(/Users/me/Projects/nodejs/myproject/node_modules/bluebird/js/release/Promise.js:691:18)
Async.\u drainQueue(/Users/me/Projects/nodejs/myproject/node\u modules/bluebird/js/release/Async.js:133:16)
在Async.\u drainQueues(/Users/me/Projects/nodejs/myproject/node\u modules/bluebird/js/release/Async.js:143:10)
在Immediate.Async.drainQueues[as _onImmediate](/Users/me/Projects/nodejs/myproject/node_modules/bluebird/js/release/Async.js:17:14)
在processImmediate[as_immediateCallback](timers.js:383:17)
我试着在一个独立的NodeJS文件上做一些体验,一切都很好,我只是启动了我的独立js文件,在数据库上做了一些操作,一切都正常。当我在我的快速路线上做同样的事情时,我犯了这个错误

有人知道为什么吗

提前感谢,,
史蒂夫

我的天啊!!!我找到了

这是因为我在对象原型中添加了一些函数

当sequelize获取模型选项的对象时,如果对象原型上有一些自定义函数,它将失败

在node_modules/sequelize/lib/dialogs/abstract/query-generator.js(第1067行)上

mainAttributes包含如下自定义函数:

[ 'id',
  'reference',
  'name',
  [ undefined, 'join' ],
  [ undefined, 'getKeyByValue' ] ]
我添加到对象中的函数是join和getKeyByValue

总之,在使用Sequelize;)时,不要向Object.prototype添加自定义函数

希望它能帮助其他人


Steve

导入表时,它已添加到
sequelize.models
数组中,因此无需再次明确添加。sequelize文档需要更新为以下内容:

readdirSync(\uuu dirname)
.filter(file=>(file.indexOf('.')!==0)和&(file!=='index.js'))
.forEach(文件=>{
sequelize.import(path.join(\uu dirname,file))
})
对象
.keys(sequelize.models)
.forEach(modelName=>{
if('associate'在sequelize.models[modelName]中){
sequelize.models[modelName]。关联(sequelize.models)
}
})

表示歉意,但无法理解您试图传达的内容。。请您详细说明我在哪里必须进行更改以删除此错误。我在使用完全相同的堆栈traceHi Amritpal时遇到了类似的问题,在我的代码中有类似“Object.prototype.join=function(){}”的内容;这一行生成了我的错误。尝试console.log node_modules/sequelize/lib/dialogs/abstract/query-generator.js(第1067行)变量“maintattributes”,您将看到。
[ 'id',
  'reference',
  'name',
  [ undefined, 'join' ],
  [ undefined, 'getKeyByValue' ] ]