Sequelize 字符串不是函数错误,为什么?

马克·布尔科夫

请需要您的帮助。为什么我在昵称对象中收到 String(150) 的奇怪错误?

const Sequelize = require('sequelize');
const devOptions = require('./../config/config').connectionConf.development;

const sequelize = new Sequelize(
  devOptions.database,
  devOptions.username,
  devOptions.password,
  {
    host: devOptions.host,
    dialect: devOptions.dialect
  }
);

const User = sequelize.define('user', {
    user_id: {
      primaryKey:true,
      type:sequelize.BIGINT,
      allowNull:false 
   },
    nickname: {
      type:sequelize.STRING(150),
      unique:true,
      allowNull:false
    },
    email: {
      type:sequelize.STRING(150),
      unique:true,
      allowNull:false
    },
    user_password: {
      type:sequelize.STRING(150),
      unique:true,
      allowNull:false
    },
    created_at: {
      type:sequelize.Date,
      created_time:sequelize.NOW,
      allowNull:false
    },
    updated_at: {
      type:sequelize.Date,
      allowNull:false
    }
  }, {});

类型错误:sequelize.STRING 不是 Object 的函数。(E:\Projects\JavaScript\couponsystem\src\models\schema.js:21:22) 在 Module._compile (internal/modules/cjs/loader.js:688:30) 在 Object.Module._extensions..js (internal/modules/cjs/loader.js:699:10) at Module.load (internal/modules/cjs/loader.js:598:32) at tryModuleLoad (internal/modules/cjs/loader.js:537:12) ) at Function.Module._load (internal/modules/cjs/loader.js:529:3) at Module.require (internal/modules/cjs/loader.js:636:17) at require (internal/modules/cjs/ helpers.js:20:18) 在对象。(E:\Projects\JavaScript\couponsystem\src\models\generator.js:1:78) 在 Module._compile (internal/modules/cjs/loader.js:688:30) 在 Object.Module._extensions..js (internal/modules/cjs/loader.js:699:10) at Module.load (internal/modules/cjs/loader.js:598:32) at tryModuleLoad (internal/modules/cjs/loader.js:537:

警戒线

由于无法使用 访问数据类型这一事实引起了我的兴趣sequelize,因此我开始查看模块的主类。

当您这样做时,const Sequelize = require('sequelize');您正在调用一个扩展数据类型的接口(它们也是一个接口),因此您可以毫无问题地使用 BIGINT 或 STRING。

但是当你这样做时

const sequelize = new Sequelize(
    devOptions.database,
    devOptions.username,
    devOptions.password,
    {
        host: devOptions.host,
        dialect: devOptions.dialect
    }
);

您指的是上述接口的构造函数(构造签名)。这导致其中的对象是sequelize另一个类或函数的实例,而不是对 的直接引用Sequelize,这就是它们具有不同属性的原因。


总之,这将是执行您请求的代码实现的正确方法。

const Sequelize = require('sequelize');
const devOptions = require('./../config/config').connectionConf.development;

const sequelize = new Sequelize(
    devOptions.database,
    devOptions.username,
    devOptions.password,
    {
        host: devOptions.host,
        dialect: devOptions.dialect
    }
);

const User = sequelize.define('user', {
    user_id: {
        primaryKey: true,
        type: Sequelize.BIGINT,
        allowNull: false
    },
    nickname: {
        type: Sequelize.STRING(150),
        unique: true,
        allowNull: false
    },
    email: {
        type: Sequelize.STRING(150),
        unique: true,
        allowNull: false
    },
    user_password: {
        type: Sequelize.STRING(150),
        unique: true,
        allowNull: false
    },
    created_at: {
        type: Sequelize.Date,
        created_time: Sequelize.NOW,
        allowNull: false
    },
    updated_at: {
        type: Sequelize.Date,
        allowNull: false
    }
}, {});

接口中的构造签名不能在类中实现;它们仅用于定义定义“新”功能的现有 JS API。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章