node.js - 我正在尝试为数据库播种,但 Sequelize 出现问题:无法打开引用的表“未定义”
问题描述
我在终端中收到此错误消息:SequelizeDatabaseError:无法打开引用的表“未定义”。终端消息没有指向我的任何文件,因此很难理解它的来源。
看起来问题与表之间的关系如何建立有关。
我的模型是:
用户.js
const {DataTypes, Model} = require('sequelize');
const sequelize = require('../config/connection');
const Message = require('./Message');
class User extends Model {
}
User.init(
{
user_id:{type: DataTypes.INTEGER, primaryKey:true, notNull:true,},
username:{type: DataTypes.STRING, allowNull:false, unique:true},
first_name:{type: DataTypes.STRING, allowNull:false},
last_name:{type: DataTypes.STRING, allowNull:false},
password:{type: DataTypes.STRING, allowNull:false},
},
{
sequelize,
freezeTableName: true,
modelName: 'User',
underscored: true,
timestamps: false,
},
);
module.exports = User;
``````
Message.js
``````lang-js
const {DataTypes, Model} = require('sequelize');
const sequelize = require('../config/connection');
const User = require('./User');
const Comment = require('./Comment');
class Message extends Model {
}
Message.init(
{
message_id: {
type: DataTypes.INTEGER,
primaryKey: true,
notNull: true,
autoincrement: true,
references: {model: Comment, key: 'message_id'}
},
content: {type: DataTypes.STRING},
username: {type: DataTypes.STRING, allowNull:false, references: {model: User, key: 'user_id'}},
},
{
sequelize,
freezeTableName: true,
modelName: 'Message',
timestamps: false,
underscored: true,
}
);
module.exports = Message;
``````
What am I doing wrong?
解决方案
我删除了模型中的所有引用,还允许 Sequelize 自行创建外键字段。
这些变化带来了诀窍:
const {DataTypes, Model} = require('sequelize');
const sequelize = require('../config/connection');
class Message extends Model {
}
Message.init(
{
id: {
type: DataTypes.INTEGER,
autoIncrement: true,
primaryKey: true,
allowNull: false,
},
title: {type: DataTypes.STRING},
content: {type: DataTypes.STRING},
//user_id: {type: DataTypes.INTEGER, allowNull: false},
// user_id: {type: DataTypes.INTEGER, allowNull: false, references: {model: sequelize.models.User, key:"user_id"}},
},
{
sequelize,
modelName: 'Message',
freezeTableName: true,
underscored: true,
timestamps: true,
}
);
module.exports = Message;
模型/index.js :
const Sequelize = require('sequelize');
const User = require('./User')
const Message = require('./Message')
const Comment = require('./Comment')
User.hasMany(Message, {foreignKey: {name: 'user_id', allowNull: false,}});
Message.belongsTo(User);
Message.hasMany(Comment, {foreignKey: {name: 'message_id', allowNull: false,}});
Comment.belongsTo(Message);
User.hasMany(Comment, {foreignKey: {name: 'user_id', allowNull: false,}});
Comment.belongsTo(User);
module.exports = {User, Message, Comment}
推荐阅读
- webos - 将我的 mysql 数据库与我的 tv lg 的 webOS 应用程序链接
- mongodb - 如何将两个单独的 Mongo 聚合组合成一个聚合?
- c - 在 C 程序中使用 shell 命令还是编写将使用某种形式的 C 代码的 shell 脚本更好?
- angular - 如何在 ngStyle 中为特定项目使用 ngFor 索引?
- node.js - 有没有办法在 EJS 中使用本机浏览器函数 fetch?
- linux - 如何将流程执行记录为汇编指令?
- azure - 如何将我的 Azure VM DNS 重定向到我的注册域?
- cakephp - 将禁用的下拉元素添加到 INSERT 语句中
- arduino - ESP32 Guru Meditation 使用 .substring 方法时出错
- javascript - 即使在 JS 中的 .then 方法中更新后,控制台日志也会显示旧值