Sequelize.define报错

TypeError: Sequelize.define is not a function

搭建了一个 koa的项目,使用Sequelize操作数据库;
app.js里面引用
const Sequelize = require('sequelize');
const sqlconfig=require('./config');
config文件是数据库的信息;
然后在app.js里面创建一个sequelize对象实例:

new Sequelize(sqlconfig.database, sqlconfig.username, sqlconfig.password, {
  host: sqlconfig.host,
  dialect: 'mysql',
  pool: {
    max: 5,
    min: 0,
    idle: 30000
  }
});

在项目里面建了一个model层,新建文件feedBack.js,定义模型,内容如下:

var sequelize = require('sequelize');

var FeedBack = sequelize.define('feedBackInfo', {
    id:{
        type: sequelize.BIGINT(19),
        primaryKey: true

    },
    third_id: {
        type: sequelize.STRING(50)
    },
    apply_no: {
        type: sequelize.STRING(20)
    },
    description: {
        type: sequelize.Text
    },
    page_source: {
        type: sequelize.STRING(20)
    },
    create_time: {
        type: sequelize.DATETIME
    },
    update_time: {
        type: sequelize.DATETIME
    }

}, {
    freezeTableName: true, // Model 对应的表名将与model名相同
    timestamps: false
});
module.exports = FeedBack;

在routes文件里面引入文件:
var FeedBack=require('../model/userFeedBackinfo');
此时报错啦:

    /Users/iqianjin-zhangshanshan/koa2-Demo/model/userFeedBackInfo.js:5
var FeedBack = sequelize.define('feedBackInfo', {
                         ^

TypeError: sequelize.define is not a function
    at Object.<anonymous> (/Users/iqianjin-zhangshanshan/koa2-Demo/model/userFeedBackInfo.js:3:26)
    at Module._compile (module.js:541:32)
    at loader (/Users/iqianjin-zhangshanshan/koa2-Demo/node_modules/babel-register/lib/node.js:144:5)
    at Object.require.extensions.(anonymous function) [as .js] (/Users/iqianjin-zhangshanshan/koa2-Demo/node_modules/babel-register/lib/node.js:154:7)
    at Module.load (module.js:458:32)
    at tryModuleLoad (module.js:417:12)
    at Function.Module._load (module.js:409:3)
    at Module.require (module.js:468:17)
    at require (internal/module.js:20:19)
    at Object.<anonymous> (/Users/iqianjin-zhangshanshan/koa2-Demo/routes/index.js:3:14)
    at Module._compile (module.js:541:32)
    at loader (/Users/iqianjin-zhangshanshan/koa2-Demo/node_modules/babel-register/[nodemon] app crashed - waiting for file changes before starting...
请各位大神帮忙解决一下,我找了很多资料都没有找到是怎么回事
阅读 7.8k
2 个回答
  • define方法是在sequelize实例上才有的,不是在全局上的

const sequelizeInstance = new Sequelize(sqlconfig.database, sqlconfig.username, sqlconfig.password, {
  host: sqlconfig.host,
  dialect: 'mysql',
  pool: {
    max: 5,
    min: 0,
    idle: 30000
  }
});
var FeedBack = sequelizeInstance.define('feedBackInfo', {
    id:{
    .....
    

一般需要在全局utils文件夹中创建sequelize实例
seque.js

// 引入Sequelize模块
const Sequelize = require("sequelize");
// 引入数据库连接配置
const CONFIG = require("./config");

// 实例化数据库对象
var sequelize = new Sequelize(
  CONFIG.MYSQL.database,
  CONFIG.MYSQL.username,
  CONFIG.MYSQL.password,
  {
    host: CONFIG.MYSQL.host,
    // 数据库类型
    dialect: "mysql",

    // 是否打印日志
    logging: CONFIG.DEBUG ? console.log : false,

    // 配置数据库连接池
    pool: {
      max: 5,
      min: 0,
      idle: 10000,
    },

    // 时区设置
    timezone: "+08:00",
  }
);
// 导出实例化数据库对象
module.exports = sequelize;

此时只需要在model文件夹下的模型中定义数据表的模型。
define是定义在数据库实例上的,而并不是在sequelize模块上的。
如:book.js

// 引入Sequelize模块
const Sequelize = require("sequelize");
// 引入数据库实例
const seque = require("../utils/seque");

const ClassMode = require("./class");

// 定义model
const Book = seque.define(
  "Book",
  {
    // 主键
    bid: {
      type: Sequelize.INTEGER,
      primaryKey: true,
      allowNull: false,
      autoIncrement: true,
    },
    // 教材名称
    bname: {
      type: Sequelize.STRING(90),
      allowNull: false,
    },
    // 班级ID
    classid: {
      type: Sequelize.STRING(90),
      allowNull: false,
    },
    // 封面图片
    cover: {
      type: Sequelize.STRING(255),
      allowNull: false,
    },
  },
  {
    // 是否支持驼峰
    underscored: true,
    // mysql数据库表名
    tableName: "stu_textbook",
  }
);

// 导出model
module.exports = Book;

// BelongsTo关联表示一对一关系的外键存在于源模型。
Book.belongsTo(ClassMode, {
  foreignKey: "classid",
  constraints: false,
});
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题