Sequelize db.define 是否一个函数?

Posted

技术标签:

【中文标题】Sequelize db.define 是否一个函数?【英文标题】:Sequelizer db.define is not a function?Sequelize db.define 是不是一个函数? 【发布时间】:2020-05-17 18:37:48 【问题描述】:

我的续集有问题。我阅读了文档并做同样的事情,但总是遇到以下错误。请帮我解决这个错误。

这是错误

TypeError: db.define 不是函数 在对象。 (/home/robin/Public/server/models/users.js:6:17)

在 Module._compile (internal/modules/cjs/loader.js:1151:30)

在 Object.Module._extensions..js (internal/modules/cjs/loader.js:1171:10)

在 Module.load (internal/modules/cjs/loader.js:1000:32)

在 Function.Module._load (internal/modules/cjs/loader.js:899:14)

在 Module.require (internal/modules/cjs/loader.js:1040:19)

在需要时(内部/模块/cjs/helpers.js:72:18)

在对象。 (/home/robin/Public/server/routes/user.js:4:14)

在 Module._compile (internal/modules/cjs/loader.js:1151:30)

在 Object.Module._extensions..js (internal/modules/cjs/loader.js:1171:10)

在 Module.load (internal/modules/cjs/loader.js:1000:32)

在 Function.Module._load (internal/modules/cjs/loader.js:899:14)

在 Module.require (internal/modules/cjs/loader.js:1040:19)

在需要时(内部/模块/cjs/helpers.js:72:18)

在对象。 (/home/robin/Public/server/app.js:10:19)

在 Module._compile (internal/modules/cjs/loader.js:1151:30)

[nodemon] 应用程序崩溃 - 启动前等待文件更改...

这是代码

模型

const Sequelize = require("sequelizer");
const db = require("../config/database");

const users = db.define("user", 
  email: 
    type: Sequelize.STRING
   
);

module.exports = users;

数据库

var fs = require("fs");
var path = require("path");
var Sequelize = require("sequelize");
var basename = path.basename(module.filename);
var env = process.env.NODE_ENV || "development";
var config = require(__dirname + "/../config/config.json")[env];
var db = ;

if (config.use_env_variable) 
  var sequelize = new Sequelize(process.env[config.use_env_variable]);
 else 
  var sequelize = new Sequelize(
    config.database,
    config.username,
    config.password,
    config
  );


fs.readdirSync(__dirname)
  .filter(function(file) 
    return (
      file.indexOf(".") !== 0 && file !== basename && file.slice(-3) === ".js"
    );
  )
  .forEach(function(file) 
    var model = sequelize["import"](path.join(__dirname, file));
    db[model.name] = model;
  );

Object.keys(db).forEach(function(modelName) 
  if (db[modelName].associate) 
    db[modelName].associate(db);
  
);

sequelize
  .authenticate()
  .then(() => 
    console.log("Connection has been established successfully.");
  )
  .catch(err => 
    console.error("Unable to connect to the database:", err);
  );

db.sequelize = sequelize;
db.Sequelize = Sequelize;

module.exports = db;

【问题讨论】:

【参考方案1】:

你的模型

const Sequelize = require("sequelizer");
const db = require("../config/database");

module.exports = (sequelize, Sequelize) => 
const users = db.define("user", 
  email: 
    type: Sequelize.STRING
   
)
    return Users


【讨论】:

【参考方案2】:

应该是这样的

db.sequelize.define("用户",

不是

db.define("用户",

const Sequelize = require("sequelizer");
const db = require("../config/database");

const users = db.sequelize.define("user", 
  email: 
    type: Sequelize.STRING
   
);

module.exports = users;

(或)(已更新)

module.exports = (sequelize, Sequelize) => 
const users = sequelize.define("user", 
      email: 
        type: Sequelize.STRING
       
    );
 

别忘了在 Dasebase 文件中导入用户模型 例如:

db.sequelize = sequelize;
db.Sequelize = Sequelize;

    db.users = require('./path/to/usermodel.js')(sequelize, Sequelize);   

module.exports = db;

【讨论】:

【参考方案3】:

我遇到了同样的问题,经过一番研究,似乎在使用sequelize-cli 时,生成的models/index.js 文件与所有nodejs 版本都不兼容。

我发现解决此问题的解决方法是将index.js 代码调整为:

const fs = require('fs');
const path = require('path');
const Sequelize = require('sequelize');
const basename = path.basename(module.filename);
const env = process.env.NODE_ENV || 'development';
const config = require('../config/config.json')[env];
const db = ;

let sequelize;
if (config.use_env_variable) 
  sequelize = new Sequelize(process.env[config.use_env_variable]);
 else 
  sequelize = new Sequelize(
    config.database, config.username, config.password, config
  );


fs
  .readdirSync(__dirname)
  .filter(file =>
    (file.indexOf('.') !== 0) &&
    (file !== basename) &&
    (file.slice(-3) === '.js'))
  .forEach(file => 
    const model = sequelize.import(path.join(__dirname, file));
    db[model.name] = model;
  );

Object.keys(db).forEach(modelName => 
  if (db[modelName].associate) 
    db[modelName].associate(db);
  
);

db.sequelize = sequelize;
db.Sequelize = Sequelize;

module.exports = db;

希望这会有所帮助!

【讨论】:

你还记得是哪个版本的节点受到影响吗?了解您在该文件中的具体更改也很有帮助。 受影响的 Node.js 的确切版本是 10.3.0,我上面添加的代码是整个 index.js 文件

以上是关于Sequelize db.define 是否一个函数?的主要内容,如果未能解决你的问题,请参考以下文章

用户如何使用 sequelize postgres nodejs 互相喜欢和不同?

Sequelize Typescript Sequelize Typescript TypeError:没有'new'就不能调用类构造函数模型

在啥情况下 db.define_table() 会返回 None

是否可以使用 Graphql 和 Sequelize 进行多租户?

是否可以在 Sequelize 迁移中定义默认值?

MySQLi 无法连接到 db,但 MySQL 可以