如何在 NodeJs 中使用 Sequelize 在 table 模型中应用外键?
How to apply Foreign Key in table model using Sequelize in NodeJs?
我正在学习如何在 NodeJs 中使用 Sequelize 来访问 MySQL 数据库,但是在创建模型时我遇到了外键问题。任何人都可以建议我应该如何申请,因为我已经尝试过但它抛出错误。
型号
exam_category.js
const Sequelize = require('sequelize');
const sequelize = require('../../database');
const ExamCategory = sequelize.define('exam_category', {
id:{ type: Sequelize.BIGINT, autoIncrement: true, allowNull: false, primaryKey: true },
exam_category_name: { type: Sequelize.STRING, allowNull: false },
isActive: { type: Sequelize.BOOLEAN, allowNull: false },
createdBy: { type: Sequelize.STRING, allowNull: true },
createdAt: { type: Sequelize.DATE, allowNull: false }
}, { timestamps: false });
module.exports = ExamCategory;
exam.js
const Sequelize = require('sequelize');
const sequelize = require('../../database');
const Exam = sequelize.define('exam', {
id:{ type: Sequelize.BIGINT, autoIncrement: true, allowNull: false, primaryKey: true },
startDate: { type: Sequelize.STRING, allowNull: false },
endDate: { type: Sequelize.STRING, allowNull: false },
startTime: { type: Sequelize.STRING, allowNull: false },
endTime: { type: Sequelize.STRING, allowNull: false },
examDuration: { type: Sequelize.INTEGER, allowNull: false },
examName: { type: Sequelize.STRING, allowNull: false },
examKey: { type: Sequelize.STRING, allowNull: false, unique: true },
exam_category_id: { type: Sequelize.BIGINT, allowNull: false, references: 'exam_category', referencesKey: 'id' },
isActive: { type: Sequelize.BOOLEAN, allowNull: false },
createdBy: { type: Sequelize.STRING, allowNull: true },
createdAt: { type: Sequelize.DATE, allowNull: false }
}, { timestamps: false });
module.exports = Exam;
然后在app.js我写了这个:
const sequelize = require('./database');
const adminUser = require('./models/users/admin_user');
const examCategory = require('./models/users/exam_category');
const exam = require('./models/users/exam');
examCategory.ExamCategory.hasMany(exam.Exam, {
foreignKey: 'exam_id',
sourceKey: 'id'
});
exam.Exam.belongsTo( examCategory.ExamCategory, {
foreignKey: 'exam_id',
targetKey: 'id'
});
sequelize.sync();
sequelize.sync({ force: true });
这是我的 database.js
const Sequelize = require('sequelize');
const examCategory = require('./exam_category');
const db = new Sequelize(
'otp_node', 'root', 'root',
{
dialect: 'mysql',
host: 'localhost'
}
);
module.exports = db;
错误
PS D:\practice\otp\frontend> node .\server.js
internal/modules/cjs/loader.js:968 throw err; ^
Error: Cannot find module './exam_category' Require stack:
- D:\practice\otp\frontend\backend\database.js
- D:\practice\otp\frontend\backend\app.js
- D:\practice\otp\frontend\server.js
at Function.Module._resolveFilename (internal/modules/cjs/loader.js:965:15)
at Function.Module._load (internal/modules/cjs/loader.js:841:27)
at Module.require (internal/modules/cjs/loader.js:1025:19)
at require (internal/modules/cjs/helpers.js:72:18)
at Object. (D:\practice\otp\frontend\backend\database.js:2:22)
at Module._compile (internal/modules/cjs/loader.js:1137:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1157:10)
at Module.load (internal/modules/cjs/loader.js:985:32)
at Function.Module._load (internal/modules/cjs/loader.js:878:14)
at Module.require (internal/modules/cjs/loader.js:1025:19) { code: 'MODULE_NOT_FOUND', requireStack: [
'D:\practice\otp\frontend\backend\database.js',
'D:\practice\otp\frontend\backend\app.js',
'D:\practice\otp\frontend\server.js' ] } PS D:\practice\otp\frontend>
作为参考,这是我的 Github Repo 代码。
谁能帮我解决这个问题?
您可以尝试在 table
中添加外键
app.js
const sequelize = require('./database');
const adminUser = require('./models/users/admin_user');
const ExamCategory = require('./models/users/exam_category');
const Exam = require('./models/users/exam');
ExamCategory.hasMany(exam, {
foreignKey: 'exam_id',
sourceKey: 'id'
});
Exam.belongsTo( examCategory, {
foreignKey: 'exam_id',
targetKey: 'id'
});
sequelize.sync();
sequelize.sync({ force: true });
在您关联 table 的文件中添加上面的代码,它将在您的 table 中添加 foreign_key 作为名称 exam_id 您可以随意命名你要
你可以在这个doc
中了解更多关于外键和table之间的关系
检查此 repository 以便您了解如何使用 sequelize
还有一个 boilerplate 的节点 sequelize
我正在学习如何在 NodeJs 中使用 Sequelize 来访问 MySQL 数据库,但是在创建模型时我遇到了外键问题。任何人都可以建议我应该如何申请,因为我已经尝试过但它抛出错误。
型号
exam_category.js
const Sequelize = require('sequelize');
const sequelize = require('../../database');
const ExamCategory = sequelize.define('exam_category', {
id:{ type: Sequelize.BIGINT, autoIncrement: true, allowNull: false, primaryKey: true },
exam_category_name: { type: Sequelize.STRING, allowNull: false },
isActive: { type: Sequelize.BOOLEAN, allowNull: false },
createdBy: { type: Sequelize.STRING, allowNull: true },
createdAt: { type: Sequelize.DATE, allowNull: false }
}, { timestamps: false });
module.exports = ExamCategory;
exam.js
const Sequelize = require('sequelize');
const sequelize = require('../../database');
const Exam = sequelize.define('exam', {
id:{ type: Sequelize.BIGINT, autoIncrement: true, allowNull: false, primaryKey: true },
startDate: { type: Sequelize.STRING, allowNull: false },
endDate: { type: Sequelize.STRING, allowNull: false },
startTime: { type: Sequelize.STRING, allowNull: false },
endTime: { type: Sequelize.STRING, allowNull: false },
examDuration: { type: Sequelize.INTEGER, allowNull: false },
examName: { type: Sequelize.STRING, allowNull: false },
examKey: { type: Sequelize.STRING, allowNull: false, unique: true },
exam_category_id: { type: Sequelize.BIGINT, allowNull: false, references: 'exam_category', referencesKey: 'id' },
isActive: { type: Sequelize.BOOLEAN, allowNull: false },
createdBy: { type: Sequelize.STRING, allowNull: true },
createdAt: { type: Sequelize.DATE, allowNull: false }
}, { timestamps: false });
module.exports = Exam;
然后在app.js我写了这个:
const sequelize = require('./database');
const adminUser = require('./models/users/admin_user');
const examCategory = require('./models/users/exam_category');
const exam = require('./models/users/exam');
examCategory.ExamCategory.hasMany(exam.Exam, {
foreignKey: 'exam_id',
sourceKey: 'id'
});
exam.Exam.belongsTo( examCategory.ExamCategory, {
foreignKey: 'exam_id',
targetKey: 'id'
});
sequelize.sync();
sequelize.sync({ force: true });
这是我的 database.js
const Sequelize = require('sequelize');
const examCategory = require('./exam_category');
const db = new Sequelize(
'otp_node', 'root', 'root',
{
dialect: 'mysql',
host: 'localhost'
}
);
module.exports = db;
错误
PS D:\practice\otp\frontend> node .\server.js internal/modules/cjs/loader.js:968 throw err; ^
Error: Cannot find module './exam_category' Require stack:
- D:\practice\otp\frontend\backend\database.js
- D:\practice\otp\frontend\backend\app.js
- D:\practice\otp\frontend\server.js at Function.Module._resolveFilename (internal/modules/cjs/loader.js:965:15) at Function.Module._load (internal/modules/cjs/loader.js:841:27) at Module.require (internal/modules/cjs/loader.js:1025:19) at require (internal/modules/cjs/helpers.js:72:18) at Object. (D:\practice\otp\frontend\backend\database.js:2:22)
at Module._compile (internal/modules/cjs/loader.js:1137:30) at Object.Module._extensions..js (internal/modules/cjs/loader.js:1157:10) at Module.load (internal/modules/cjs/loader.js:985:32) at Function.Module._load (internal/modules/cjs/loader.js:878:14) at Module.require (internal/modules/cjs/loader.js:1025:19) { code: 'MODULE_NOT_FOUND', requireStack: [ 'D:\practice\otp\frontend\backend\database.js', 'D:\practice\otp\frontend\backend\app.js', 'D:\practice\otp\frontend\server.js' ] } PS D:\practice\otp\frontend>
作为参考,这是我的 Github Repo 代码。 谁能帮我解决这个问题?
您可以尝试在 table
中添加外键app.js
const sequelize = require('./database');
const adminUser = require('./models/users/admin_user');
const ExamCategory = require('./models/users/exam_category');
const Exam = require('./models/users/exam');
ExamCategory.hasMany(exam, {
foreignKey: 'exam_id',
sourceKey: 'id'
});
Exam.belongsTo( examCategory, {
foreignKey: 'exam_id',
targetKey: 'id'
});
sequelize.sync();
sequelize.sync({ force: true });
在您关联 table 的文件中添加上面的代码,它将在您的 table 中添加 foreign_key 作为名称 exam_id 您可以随意命名你要
你可以在这个doc
中了解更多关于外键和table之间的关系检查此 repository 以便您了解如何使用 sequelize 还有一个 boilerplate 的节点 sequelize