Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/452.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Sequelize:TypeError:User.hasMany不是函数_Javascript_Node.js_Postgresql_Express_Sequelize.js - Fatal编程技术网

Javascript Sequelize:TypeError:User.hasMany不是函数

Javascript Sequelize:TypeError:User.hasMany不是函数,javascript,node.js,postgresql,express,sequelize.js,Javascript,Node.js,Postgresql,Express,Sequelize.js,我有这种奇怪的行为。 我有一个用户模型和一个客户端模型。用户有许多客户端。 我正在使用此文档: 当我运行服务器时,Sequelize抛出TypeError:User.hasMany不是一个函数 节点版本:8.9.1 方言:postgres 数据库版本:Postgres 10 续集版本:4.22.15 以下文件都在同一文件夹中 user.js模型 const Sequelize = require('sequelize'); const db = require('../index.js'); /

我有这种奇怪的行为。 我有一个用户模型和一个客户端模型。用户有许多客户端。 我正在使用此文档:

当我运行服务器时,Sequelize抛出TypeError:User.hasMany不是一个函数

节点版本:8.9.1
方言:postgres
数据库版本:Postgres 10
续集版本:4.22.15

以下文件都在同一文件夹中

user.js模型

const Sequelize = require('sequelize');
const db = require('../index.js'); //This is an instance of new Sequelize(...)

const tableName = 'users';

const User = db.define('user', {
  firstName: {
    type: Sequelize.STRING(50),
    allowNull: false,
    validate: {
      notEmpty: true
    }
  },
  lastName: {
    type: Sequelize.STRING(50),
    allowNull: false,
    validate: {
      notEmpty: true
    }
  },
  username: { //Username will be the email
    type: Sequelize.STRING(80),
    allowNull: false,
    unique: true,
    validate: {
      isEmail: true
    }
  },
  password: {
    type: Sequelize.STRING,
    allowNull: false,
    validate: {
      notEmpty: true
    }
  },
  isAdmin: {
    type: Sequelize.BOOLEAN,
    allowNull: false,
    defaultValue: false
  },
  isActive: {
    type: Sequelize.BOOLEAN,
    allowNull: false,
    defaultValue: false
  }

}, { tableName });

module.exports = User;
client.js模型

'use strict'

const Sequelize = require('sequelize');
const db = require('../index.js');

const instanceMethods = {
  toJSON() {
    const values = Object.assign({}, this.get());

    return values;
  },
};

const Client = db.define('clients', {
  ibid: {
    type: Sequelize.BIGINT,
    allowNull: true,
    defaultValue: null
  },
  firstName: {
    type: Sequelize.STRING(50),
    allowNull: false,
    validate: {
      notEmpty: true
    }
  },
  lastName: {
    type: Sequelize.STRING(50),
    allowNull: false,
    validate: {
      notEmpty: true
    }
  },
  agreementSigned: {
    type: Sequelize.BOOLEAN,
    allowNull: false,
    defaultValue: false
  },
  totalBalance: {
    type: Sequelize.DECIMAL(11,2),
    allowNull: true,
    defaultValue: null
  },
  currentAllocation: {
    type: Sequelize.STRING,
    allowNull: true,
    defaultValue: null
  }

}, { instanceMethods });

module.exports = Client;
index.js模型

'use strict';

const User = require('./user')
const Client = require('./client');

User.hasMany(Client);
Client.belongsTo(User);

module.exports = {User, Client};
在index.js中, 您尚未导出已初始化的新sequelize实例,因此client.js和user.js无法使用它!define函数作用于您创建的sequelize实例对象

此外,项目中存在循环依赖关系,这可能会造成问题

我试过你的代码,改变了结构,现在可以了!可能还有其他可能的结构,但这一个适合我

1) 不要在index.js中创建sequelize的新实例,而是创建另一个文件作为sequelize实例的初始化

sequelize_index.js(我使用这个文件创建了一个基本实例,然后在客户端和用户模型中使用这个基本实例)

2) client.js看起来像这样

'use strict'
const Sequelize = require('sequelize');

const sequelize=require('./sequelize_index').sequelize;
const db = require('./index.js');

const instanceMethods = {
    toJSON() {
        const values = Object.assign({}, this.get());

        return values;
    },
};

const Client = sequelize.define('clients', {
    ibid: {
        type: Sequelize.BIGINT,
        allowNull: true,
        defaultValue: null
    },
    firstName: {
        type: Sequelize.STRING(50),
        allowNull: false,
        validate: {
            notEmpty: true
        }
    },
    lastName: {
        type: Sequelize.STRING(50),
        allowNull: false,
        validate: {
            notEmpty: true
        }
    },
    agreementSigned: {
        type: Sequelize.BOOLEAN,
        allowNull: false,
        defaultValue: false
    },
    totalBalance: {
        type: Sequelize.DECIMAL(11,2),
        allowNull: true,
        defaultValue: null
    },
    currentAllocation: {
        type: Sequelize.STRING,
        allowNull: true,
        defaultValue: null
    }

}, { instanceMethods });

module.exports = Client;
3) User.js

4) index.js


运行index.js后,将创建数据库

在user.js中,您没有导出user
module.exports=user
@Molda很抱歉,我没有复制文件的最终版本,但是是的,我正在正确导出用户模型。我想知道任何其他结构来删除循环依赖项!谢谢!:)@感谢您的回复!我以前可以解决这个问题。我意识到,在使用某种模型之前,我必须需要数据库(我有一个使用User的auth文件,以前我没有包括数据库)。我不太喜欢这种方式,所以明天我会试试你的方式,看起来不错。问候语!
'use strict'
const Sequelize = require('sequelize');

const sequelize=require('./sequelize_index').sequelize;
const db = require('./index.js');

const instanceMethods = {
    toJSON() {
        const values = Object.assign({}, this.get());

        return values;
    },
};

const Client = sequelize.define('clients', {
    ibid: {
        type: Sequelize.BIGINT,
        allowNull: true,
        defaultValue: null
    },
    firstName: {
        type: Sequelize.STRING(50),
        allowNull: false,
        validate: {
            notEmpty: true
        }
    },
    lastName: {
        type: Sequelize.STRING(50),
        allowNull: false,
        validate: {
            notEmpty: true
        }
    },
    agreementSigned: {
        type: Sequelize.BOOLEAN,
        allowNull: false,
        defaultValue: false
    },
    totalBalance: {
        type: Sequelize.DECIMAL(11,2),
        allowNull: true,
        defaultValue: null
    },
    currentAllocation: {
        type: Sequelize.STRING,
        allowNull: true,
        defaultValue: null
    }

}, { instanceMethods });

module.exports = Client;
const Sequelize = require('sequelize');
const sequelize=require('./sequelize_index').sequelize;
const db = require('./index.js'); //This is an instance of new Sequelize(...)

const tableName = 'users';

const User = sequelize.define('user', {
    firstName: {
        type: Sequelize.STRING(50),
        allowNull: false,
        validate: {
            notEmpty: true
        }
    },
    lastName: {
        type: Sequelize.STRING(50),
        allowNull: false,
        validate: {
            notEmpty: true
        }
    },
    username: { //Username will be the email
        type: Sequelize.STRING(80),
        allowNull: false,
        unique: true,
        validate: {
            isEmail: true
        }
    },
    password: {
        type: Sequelize.STRING,
        allowNull: false,
        validate: {
            notEmpty: true
        }
    },
    isAdmin: {
        type: Sequelize.BOOLEAN,
        allowNull: false,
        defaultValue: false
    },
    isActive: {
        type: Sequelize.BOOLEAN,
        allowNull: false,
        defaultValue: false
    }

}, { tableName });

module.exports = User;
'use strict';
const sequelize = require('./sequelize_index').sequelize;
const User = require('./user')
const Client = require('./client');


User.hasMany(Client);
Client.belongsTo(User);

sequelize.sync({force: false}).then(function () {
    console.log("Database Configured");
});
module.exports = {User, Client};