javascript - 在 Model.belongsTo 调用不是 Sequelize.Model 实例的东西

标签 javascript node.js sequelize.js

我试图在两个模型之间引用外键。

但是我收到了这个错误:

throw new Error(this.name + '.' + Utils.lowercaseFirst(Type.toString()) + ' called with something that\'s not an instance of Sequelize.Model');
called with something that's not an instance of Sequelize.Model
    at Model.belongsTo

我该如何解决这个问题?

到目前为止,这是我的代码。

这是我的模型/mercadolibre.js

"use strict";
var User  = require('../models/index').User;

module.exports = function(sequelize, DataTypes) {
  var MercadoLibre = sequelize.define("MercadoLibre", {
    id:  { 
          type: DataTypes.INTEGER, 
          autoIncrement: true, 
          primaryKey: true
        },
    access_token: DataTypes.STRING,
    refresh_token: DataTypes.STRING,
    environment_hash: DataTypes.STRING 
  }, {
    tableName: 'mercadolibres',
    underscored: true,
    timestamps: true
  }

  );

  MercadoLibre.belongsTo(User);

  return MercadoLibre;
};

这是我的模型/user.js

"use strict";

module.exports = function(sequelize, DataTypes) {
  var User = sequelize.define("User", {
    id:  { 
          type: DataTypes.INTEGER, 
          autoIncrement: true, 
          primaryKey: true
        },
    name: DataTypes.STRING,
    slack_id: DataTypes.STRING,
    environment_hash: {
          type: DataTypes.STRING,
          defaultValue: DataTypes.UUIDV4
        }
  }, {
    tableName: 'users',
    underscored: false,
    timestamps: false
  }

  );

  return User;
};

这是我的模型/index.js

"use strict";

var fs        = require("fs");
var path      = require("path");
var Sequelize = require('sequelize')
  , sequelize = new Sequelize(process.env.MYSQL_DB, process.env.MYSQL_USER, process.env.MYSQL_PASSWORD, {
      dialect: "mysql", // or 'sqlite', 'postgres', 'mariadb'
      port:    3306, // or 5432 (for postgres)
});


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;

最佳答案

像这样使用:

module.exports = function(sequelize, DataTypes) {
var MercadoLibre = sequelize.define("MercadoLibre", {
   id:  { 
      type: DataTypes.INTEGER, 
      autoIncrement: true, 
      primaryKey: true
    },
    access_token: DataTypes.STRING,
    refresh_token: DataTypes.STRING,
    environment_hash: DataTypes.STRING 
}, {
    tableName: 'mercadolibres',
    underscored: true,
    timestamps: true,
    classMethods: {
        associate : function(models) {
            MercadoLibre.belongsTo(models.User)
        },
      },
  });



return MercadoLibre;

};

关于javascript - 在 Model.belongsTo 调用不是 Sequelize.Model 实例的东西,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40961709/

相关文章:

javascript - console.log 在 Liferay 的 Firebug 中什么都不做

javascript - repl Node js问题SyntaxError : Unexpected identifier

node.js - 如何在 Node cron 作业中使用请求/响应

node.js - 如何从我的 Express API 中的 mysql blob 字段的缓冲区返回字符串?

node.js - 如何从sequelize中收到的对象中删除属性?

sql-server - 在返回查询中不遵守更新插入的 where 子句的 Sequelize

javascript - "prevState"和 "prevProps"在 React Native 中的行为不符合预期

javascript - jQuery :contains(), 但要匹配精确的字符串

javascript - jQuery 小部件从事件处理程序调用私有(private)函数

node.js - 在 nodejs 中试图让 http-proxy 转发通过查询字符串参数传递的请求