【问题标题】: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;

【问题讨论】:

    标签: node.js sequelize.js


    【解决方案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 文件
        猜你喜欢
        • 2021-12-04
        • 2020-04-08
        • 2018-07-30
        • 2017-04-24
        • 2019-11-17
        • 2021-07-27
        • 1970-01-01
        • 1970-01-01
        • 2020-12-01
        相关资源
        最近更新 更多