当前位置: 首页 > 知识库问答 >
问题:

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

宗政斌
2023-03-14

请你帮忙。为什么昵称对象中的字符串(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
    }
  }, {});

类型错误:续集。字符串不是对象上的函数。(E:\Projects\JavaScript\couponsystem\src\models\schema.js:21:22)位于模块_在对象处编译(internal/modules/cjs/loader.js:688:30)。模块_扩展。。模块处的js(internal/modules/cjs/loader.js:699:10)。在函数tryModuleLoad(internal/modules/cjs/loader.js:598:32)处加载(internal/modules/cjs/loader.js:537:12)。模块_在模块处加载(内部/modules/cjs/loader.js:529:3)。require(internal/modules/cjs/loader.js:636:17)at require(internal/modules/cjs/helpers.js:20:18)at Object。(E:\Projects\JavaScript\couponsystem\src\models\generator.js:1:78)位于模块_在对象处编译(internal/modules/cjs/loader.js:688:30)。模块_扩展。。模块处的js(internal/modules/cjs/loader.js:699:10)。在函数tryModuleLoad(internal/modules/cjs/loader.js:598:32)处加载(internal/modules/cjs/loader.js:537:12)。模块_在功能处加载(内部/modules/cjs/loader.js:529:3)。单元启动时运行main(internal/modules/cjs/loader.js:741:12)(internal/bootstrap/node.js:285:19)和bootstrapNodeJSCore(internal/bootstrap/node.js:739:3)

共有2个答案

经俊茂
2023-03-14

这应该行得通,有关更多信息,请阅读下面的文档。

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,
      unique:true,
      allowNull:false
    },
    email: {
      type:sequelize.STRING,
      unique:true,
      allowNull:false
    },
    user_password: {
      type:sequelize.STRING,
      unique:true,
      allowNull:false
    },
    created_at: {
      type:sequelize.Date,
      created_time:sequelize.NOW,
      allowNull:false
    },
    updated_at: {
      type:sequelize.Date,
      allowNull:false
    }
  }, {});

文档,额外信息

梁韬
2023-03-14

你不能访问数据类型与测序的事实引起了我的兴趣,我开始审查模块的主类。

当您这样做const 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。

 类似资料:
  • 问题内容: 我在PHP代码的顶部添加了以下几行,但是会引发错误: 致命错误:函数名称必须是第2行/home/reg.php中的字符串 我尝试过:。cookie已成功设置并且可用。使用时为什么会给我一个错误? 问题答案: 应该是,不是 是一个数组,而不是一个函数。

  • ActivationFunction.java:6:错误:不兼容类型:double无法转换为字符串r=double.ParseDouble(r);^ActivationFunction.java:8:错误:不兼容类型:如果(double.isNaN(x))返回r,则字符串无法转换为double;^

  • 既然我们可以在Javascript中使用关键字抛出任何东西,那么我们就不能直接抛出一个错误消息字符串吗? 有人知道这里面有什么陷阱吗? 让我对此添加一些背景:在JavaScript世界中,人们通常依赖参数检查而不是使用try-catch机制,因此只使用抛出致命错误是有意义的。不过,为了能够捕捉一些系统错误,我必须为我自己的错误使用一个不同的类,而不是创建错误的子类,我认为我应该只使用String。

  • 问题内容: 在.NET Framework 的参考中,使用type 声明请求类型。 在RFC 2616 中,声明了所有HTTP请求方法(例如POST,GET,PUT,DELETE …)。 .NET 和类中也存在类似的行为。 Java在方法上有类似的方法。 这些语言设计者为什么不考虑为这些HTTP方法实现枚举? 你有好主意吗? 问题答案: RFC 2616 链接的第一句话(添加了重点): HTTP

  • 问题内容: 我只是想知道为什么Google Go中的字符串函数是在包中定义的,而不是在数据类型本身上定义的。他们本可以轻松完成 而不是当前 在包装中。 我的猜测是,如果您想在扩展的自定义类型上实现的自定义版本(即),则无法再访问该类型的内置函数,但是我找不到对此的任何支持。 问题答案: 简短的答案是:“保持语言简单”。 作为一种语言运行,仅允许在同一程序包中的类型上定义方法,但是由于(像其他内置类

  • Oracle指定了有关数字升级的 数字提升(§5.6)将数字运算符的操作数带到公共类型,以便可以执行操作。 如果任一操作数的类型是双,另一个转换为双。 否则,如果其中一个操作数的类型为float,则另一个操作数将转换为float。 否则,如果其中一个操作数的类型为long,则另一个操作数将转换为long。 否则,两个操作数都将转换为int类型。 Oracle指定了有关 如果只有一个操作数表达式为S