gpt4 book ai didi

sequelize.js - 我正在使用 docker 和 sequelize 处理 nodejs 项目,我收到错误 : cannot read property toString of undefined

转载 作者:行者123 更新时间:2023-12-03 22:35:27 24 4
gpt4 key购买 nike

这是我的异常截图:

this is my stacktrace

下面是我的模型:

module.exports.up = (queryInterface, DataTypes) => {
return queryInterface.createTable('users', {
id: {
allowNull: false,
type: DataTypes.UUID
},
email: {
allowNull: false,
type: Sequelize.STRING,
unique: true
},
passwordHash: {
allowNull: false,
type: DataTypes.CHAR(64)
},
createdAt: {
allowNull: false,
type: DataTypes.DATE
},
updatedAt: {
allowNull: false,
type: DataTypes.DATE
},
deletedAt: {
allowNull: true,
type: DataTypes.DATE
}
}, {
charset:"utf8"
}
);

};

module.exports.down = queryInterface => queryInterface.dropTable("users");
module.exports.up = (queryInterface, DataTypes) => {
return queryInterface.createTable('userSession', {
id: {
allowNull: false,
type: DataTypes.UUID
},

userId: {
references: "id",
model:"users"
},

passwordHash: {
allowNull: false,
type: DataTypes.CHAR(64)
},
createdAt: {
allowNull: false,
type: DataTypes.DATE
},
updatedAt: {
allowNull: false,
type: DataTypes.DATE
},
deletedAt: {
allowNull: true,
type: DataTypes.DATE
}
}, {
charset:"utf8"
}
);

};

module.exports.down = queryInterface => queryInterface.dropTable("userSession");

我不知道出了什么问题,提前谢谢你

最佳答案

问题在于迁移的以下部分:

  • Sequelize 在这里没有定义。将其更改为 DataTypes
  •     email: {
    allowNull: false,
    type: Sequelize.STRING,
    unique: true
    },
  • 引用未在 userSession 表中正确定义。它应该像这样定义:
  •       userId: {
    type: DataTypes.UUID,
    references: {
    model: 'users',
    key: 'id',
    },
    },
  • 最后但并非最不重要的是,users 表的 id 字段应定义为主键。否则您无法将其分配为 userSession 表中的外键。因此,在用户表中,添加属性 primaryKey: true
  •       id: {
    primaryKey: true,
    allowNull: false,
    type: DataTypes.UUID
    },

    所以迁移脚本最终看起来像这样:

    对于用户表:
    module.exports.up = (queryInterface, DataTypes) => {
    return queryInterface.createTable('users', {
    id: {
    primaryKey: true,
    allowNull: false,
    type: DataTypes.UUID
    },
    email: {
    allowNull: false,
    type: DataTypes.STRING,
    unique: true
    },
    passwordHash: {
    allowNull: false,
    type: DataTypes.CHAR(64)
    },
    createdAt: {
    allowNull: false,
    type: DataTypes.DATE
    },
    updatedAt: {
    allowNull: false,
    type: DataTypes.DATE
    },
    deletedAt: {
    allowNull: true,
    type: DataTypes.DATE
    }
    }, {
    charset:"utf8"
    }
    );
    };

    module.exports.down = queryInterface => queryInterface.dropTable("users");

    对于 userSession 表:
    module.exports.up = (queryInterface, DataTypes) => {
    return queryInterface.createTable('userSession', {
    id: {
    allowNull: false,
    type: DataTypes.UUID
    },
    userId: {
    type: DataTypes.UUID,
    references: {
    model: 'users',
    key: 'id',
    },
    },
    passwordHash: {
    allowNull: false,
    type: DataTypes.CHAR(64)
    },
    createdAt: {
    allowNull: false,
    type: DataTypes.DATE
    },
    updatedAt: {
    allowNull: false,
    type: DataTypes.DATE
    },
    deletedAt: {
    allowNull: true,
    type: DataTypes.DATE
    }
    }, {
    charset:"utf8"
    }
    );
    };

    module.exports.down = queryInterface => queryInterface.dropTable("userSession");

    P.S:删除旧表和数据库中的 SequelizeMeta,然后运行迁移。

    关于sequelize.js - 我正在使用 docker 和 sequelize 处理 nodejs 项目,我收到错误 : cannot read property toString of undefined,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61448408/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com