Sequelize.define() 不是函数?

tom*_*ato 5 node.js sequelize.js

尝试在 node.js 网络服务器中使用 Sequelize。

我已经像这样在 index.js 中初始化了 Sequelize 连接池

索引.js

const config = require('./config/config');
const app = require('./config/express');
const Sequelize = require('sequelize');

const sequelize = new Sequelize(config.mysql.database, config.mysql.user, config.mysql.pass, {
  host: config.mysql.host,
  dialect: 'mysql',
  operatorsAliases: false,

  pool: {
    max: 5,
    min: 0,
    acquire: 30000,
    idle: 10000
  },
});

sequelize
  .authenticate()
  .then(() => {
    console.log('Connection has been established successfully.'); // eslint-disable-line no-console
  })
  .catch((err) => {
    console.error('Unable to connect to the database:', err); // eslint-disable-line no-console
  });

module.exports = { app, sequelize };
Run Code Online (Sandbox Code Playgroud)

user.js 模型

const sequelize = require('sequelize');
const DataTypes = require('mysql');
/**
 * User model
 */
const User = sequelize.define('user', {

  id: {
    type: DataTypes.INTEGER,
  },
  name: {
    type: DataTypes.STRING,
  },
  email: {
    type: DataTypes.STRING,
  },
  lastEmail: {
    type: DataTypes.TIME,
  }
});
Run Code Online (Sandbox Code Playgroud)

尝试启动服务器时出现以下错误

类型错误:sequelize.define 不是函数... user.js

我猜 sequelize 对象没有被全局化,但是我在创建模型之前测试了连接,它很好。

小智 6

在 user.js 中,您试图.define()在不是实例的东西上使用实例方法。在 index.js 中,您确实通过调用构造函数创建了一个实例,但这在 user.js 中不可用。此处的解决方案实际上取决于您要完成的任务以及您希望如何组织代码。通常 index.js 是你的应用程序的入口点,所以导出appsequelize从那里导出有点不寻常,但如果这是你想要做的,那么在你的 user.js 文件中你可能需要 index.js,并且使用您在那里定义的 sequelize 实例。在这种情况下,您的 index.js 将保持不变,而 User.js 可能只是在第一个中发生了变化require

const sequelize = require('index.js').sequelize;
const DataTypes = require('mysql');

/**
 * User model
 */
const User = sequelize.define('user', {

  id: {
    type: DataTypes.INTEGER,
  },
  name: {
    type: DataTypes.STRING,
  },
  email: {
    type: DataTypes.STRING,
  },
  lastEmail: {
    type: DataTypes.TIME,
  }
});
Run Code Online (Sandbox Code Playgroud)

我不一定推荐这种方法,因为同样,它确实取决于您要尝试做什么(我认为您可能遗漏了一些代码?),但它确实显示了使用实例化 sequelize 对象的一种方法来自 user.js 中的 index.js