#node.js #model #sequelize.js #associations #junction
Вопрос:
Я новичок в NodeJS, и у меня возникли некоторые проблемы с отношениями, моделями и контроллерами. Я читал и пытался понять API-интерфейс Sequelize, но я действительно не знаю, как выполнять определенные действия, и поэтому я застрял.
У меня есть 2 основные модели. Один называется Проектом, а другой — Пользователем. Эти 2 модели я хочу связать с третьей моделью, называемой UserProject.
Модель UserProject ссылается на модели проекта и пользователей через их PK (project_id, user_id), а также имеет третий столбец с именем «тип пользователя», который определяет, имеет ли пользователь тот или иной ранг (Мастер, разработчик,…)
Я не знаю, как продолжать, так как в процессе я получаю бесчисленные ошибки, и прошло 2 дня без света. Я поделюсь своими моделями, контроллерами и индексом ниже:
Модель пользователя:
module.exports = (sequelize, Sequelize) => {
const User = sequelize.define("user", {
username: {
type: Sequelize.STRING
},
password: {
type: Sequelize.STRING
},
email: {
type: Sequelize.STRING
}
});
return User;
};
Модель проекта:
module.exports = (sequelize, Sequelize) => {
const Project = sequelize.define("project", {
title: {
type: Sequelize.STRING
},
description: {
type: Sequelize.STRING
},
releaseDate: {
type: Sequelize.DATE
},
accessCode: {
type: Sequelize.INTEGER
}
});
return Project;
};
Модель пользовательского проекта:
const Project = require("./project.model.js");
const User = require("./user.model.js");
module.exports = (sequelize, Sequelize) => {
const UserProject = sequelize.define('userProject', {
userId: {
type: Sequelize.INTEGER,
},
projectId: {
type: Sequelize.INTEGER,
},
user_type: {
type: Sequelize.INTEGER,
}
});
User.belongsToMany(Project, { through: UserProject });
Project.belongsToMany(User, { through: UserProject });
return UserProject;
};
Project Controller:
const db = require("../models");
const Project = db.projects;
const User = db.users;
const Op = db.Sequelize.Op;
// Retrieve all Projects with User from the database.
exports.findAll = (req, res) => {
Project.findAll({
include: User
})
.then(data => {
res.send(data);
})
.catch(err => {
res.status(500).send({
message:
err.message || "Some error occurred while retrieving projects."
});
});
};
Index.js:
const dbConfig = require("../config/db.config.js");
const Sequelize = require("sequelize");
const sequelize = new Sequelize(dbConfig.DB, dbConfig.USER, dbConfig.PASSWORD, {
host: dbConfig.HOST,
dialect: dbConfig.dialect,
operatorsAliases: false,
pool: {
max: dbConfig.pool.max,
min: dbConfig.pool.min,
acquire: dbConfig.pool.acquire,
idle: dbConfig.pool.idle
}
});
const db = {};
db.Sequelize = Sequelize;
db.sequelize = sequelize;
db.projects = require("./project.model.js")(sequelize, Sequelize);
db.users = require("./user.model.js")(sequelize, Sequelize);
db.users_projects = require("./userProject.model.js")(sequelize, Sequelize);
module.exports = db;
Can someone tell me what am I missing? Thank you guys