Sequelize string 不是函数错误,为啥?
Posted
技术标签:
【中文标题】Sequelize string 不是函数错误,为啥?【英文标题】:Sequelize string is not a function error , why?Sequelize string 不是函数错误,为什么? 【发布时间】:2019-06-08 09:10:50 【问题描述】:请需要你的帮助。 为什么我在昵称对象中收到 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
, );
TypeError: sequelize.STRING 不是函数 在对象。 (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) 在 Module.load (internal/modules/cjs/loader.js:598:32) 在 tryModuleLoad (internal/modules/cjs/loader.js:537:12) 在 Function.Module._load (internal/modules/cjs/loader.js:529:3) 在 Module.require (internal/modules/cjs/loader.js:636:17) 在需要(内部/模块/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) 在 Module.load (internal/modules/cjs/loader.js:598:32) 在 tryModuleLoad (internal/modules/cjs/loader.js:537:12) 在 Function.Module._load (internal/modules/cjs/loader.js:529:3) 在 Function.Module.runMain (internal/modules/cjs/loader.js:741:12) 启动时(内部/bootstrap/node.js:285:19) 在 bootstrapNodeJSCore (internal/bootstrap/node.js:739:3)
【问题讨论】:
【参考方案1】:由于无法使用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 功能。
【讨论】:
【参考方案2】:这应该有效,有关更多信息,请阅读下面的文档。
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
, );
Docs, Extra info
【讨论】:
这样的语法有什么问题???类型:sequelize.STRING(150) 文档 - docs.sequelizejs.com/manual/tutorial/… 嗯,错误非常具体。 STRING 不是函数。所以要么需要一个错误的“Sequalize”。或者文档是错误的。或者输出在说谎。或者,更有可能。 “sequalize” const 使用不相关的参数启动。 @ArelSapir 文档:docs.sequelizejs.com/variable/…,明确指出sequalize.STRING
是一个函数。
所以,正如我所说。它可能是以下情况之一:需要错误的“Sequalize”。或者文档是错误的。或者输出在说谎。或者“sequalize”常量使用错误的参数启动。
sequelize.STRING 和 Sequelize.STRING 有什么区别?以上是关于Sequelize string 不是函数错误,为啥?的主要内容,如果未能解决你的问题,请参考以下文章
同步 sequelize 模型:sequelize.import() 不是函数(并且已弃用)