node.js - Sequelize DataTypes 类型错误 : Cannot read property 'INTEGER' of undefined

标签 node.js express sequelize.js

我在定义模型时遇到了 Sequelize DataTypes.INTEGER 问题。我正在关注名为“使用 Node.js 构建 API”的电子书中的示例。我是一个试图掌握 Express 和 Sequelize 的初学者。

错误详情:

> /home/xxx/workspace/ntask-api/models/tasks.js:9
>       type: DataTypes.INTEGER,
>                      ^ TypeError: Cannot read property 'INTEGER' of undefined
>     at Function.module.exports (/home/xxx/workspace/ntask-api/models/tasks.js:9:21)
>     at Consign.into (/home/xxx/workspace/ntask-api/node_modules/consign/lib/consign.js:239:17)
>     at Object.<anonymous> (/home/xxx/workspace/ntask-api/index.js:13:5)
>     at Module._compile (module.js:456:26)
>     at Object.Module._extensions..js (module.js:474:10)
>     at Module.load (module.js:356:32)
>     at Function.Module._load (module.js:312:12)
>     at Function.Module.runMain (module.js:497:10)
>     at startup (node.js:119:16)
>     at node.js:902:3

/models/tasks.js 中的以下代码示例:

> module.exports = function(sequelize, DataTypes){
>     //console.log(DataTypes.INTEGER);
>     const Tasks = sequelize.define("Tasks", {     id: {
>       type: DataTypes.INTEGER,
>       primaryKey: true,
>       autoIncrement: true     },  title: {
>       type: DataTypes.STRING,
>       allowNull: false,
>       validate: {         notEmpty: true
>       }   },  done: {
>       type: DataTypes.BOOLEAN,
>       allowNull: false,
>       defaultValue: false     }
>     }, 
>     {     classMethods:{
>       associate: function(models){        Tasks.belongsTo(models.Users, {
>           onDelete: "CASCADE",
>           foreignKey: {           allowNull: false
>           }       }); 
>       }   }
>     });
>     return Tasks; };

我也尝试了 TypeError: object is not a function when defining models in NodeJs using Sequelize 的建议,将其添加到 models/tasks.js 文件的顶部,但出现了同样的错误。

var DataTypes = require('sequelize/lib/data-types');

最佳答案

sequelize变化很大,所以stackoverflow的答案可能不正确。

如果你查看 sequelize 文档 ( link )

他们开始改用Sequelize.XXXX

这是文档中的例子

var Project = sequelize.define('project', {
  title: Sequelize.STRING,
  description: Sequelize.TEXT
})

var Task = sequelize.define('task', {
  title: Sequelize.STRING,
  description: Sequelize.TEXT,
  deadline: Sequelize.DATE
})

因此,您有两种方法可以实现这一点

  1. require('sequelize') 在每个模型文件中
  2. require('sequelize')index 文件中并将其传递给每个模型文件

关于node.js - Sequelize DataTypes 类型错误 : Cannot read property 'INTEGER' of undefined,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38778482/

相关文章:

linux - Node - 我的应用程序出了什么问题?

node.js - 我可以在 Node.js 启动时运行多个 js 脚本吗

javascript - Express.js CRUD 应用程序错误 : update function does wrong redirect

node.js - 如何像 Node Express 中的静态 HTML 页面一样提供呈现的 Jade 页面?

node.js - 在 Sequelize.js 的聚合函数中使用 case-when

node.js - Sequelize |如果 hasMany 关联匹配它们的 where 条件,则返回结果

javascript - 17位时间戳的区别

javascript - 访问 promise 回调中对象的 'this'(然后)

javascript - 是否可以使用 findAll() 创建查询并使用数据透视表(多对多关系)中的 ForeignKey 获取过滤结果?

javascript - Node + Express + Passport + Mongoose : req. 用户未定义