Я использую node js и express для бэкэнда, REST API и база данных Postgresql. Я использую Sequelize для подключения и моделей. Я создал две модели: одна студентка, а другая - курс. Я протестировал свое приложение с помощью POSTMAN, и все работает нормально, как и ожидалось. Вместо того, чтобы помещать весь код в Express, я решил использовать Express маршрутов. Теперь, когда я тестирую свое приложение через POSTMAN после использования маршрутов. Мои данные хранятся в разных таблицах. Например: если я опубликую данные ученика, они сохранятся в таблице курса. Я не знаю, что я делаю не так. Я знаю, что совершил какую-то глупую ошибку, я просто не вижу ее.
Это мои модели данных и связь
const sequelize = require("sequelize");
var con = new sequelize("school", "postgres", "password", {
host: "localhost",
dialect: "postgres",
pool: {
max: 5,
min: 0,
idle: 10000
}
});
const Student = con.define("student", {
id: {
type: sequelize.INTEGER,
primaryKey: true,
autoIncrement: true,
unique: true
},
name: {
type: sequelize.STRING,
allowNull: false
},
birthday: {
type: sequelize.DATEONLY,
allowNull: false
},
address: {
type: sequelize.STRING,
allowNull: false
},
zipcode: {
type: sequelize.INTEGER,
allowNull: false
},
city: {
type: sequelize.STRING,
allowNull: false
},
phone: {
type: sequelize.BIGINT,
allowNull: false,
unique: true
},
email: {
type: sequelize.STRING,
allowNull: false,
unique: true,
validate: {
isEmail: true
}
}
});
const Course = con.define("course", {
id: {
type: sequelize.INTEGER,
primaryKey: true,
autoIncrement: true
},
name: { type: sequelize.STRING },
startdate: { type: sequelize.DATEONLY },
enddate: { type: sequelize.DATEONLY },
studentId: { type: sequelize.INTEGER, foreignKey: true }
});
Student.hasMany(Course);
Course.belongsTo(Student);
//con.sync({ force: true });
module.exports = Student;
module.exports = Course;
Этот студент маршрут
const express = require("express");
const studentRoute = express.Router();
const Student = require("./db");
const Course = require("./db");
studentRoute.get("/", async (req, res, next) => {
try {
await Student.findAll({
include: [
{
model: Course
}
]
}).then(docs => {
const response = {
count: docs.length,
students: docs
};
res.json(response);
});
} catch (error) {
console.log(error);
}
});
studentRoute.get("/:id", async (req, res, next) => {
const id = req.params.id;
try {
Student.findByPk(id).then(data => {
console.log(data);
res.json(data);
});
} catch (error) {
console.log(error);
}
});
studentRoute.put("/:id", async (req, res) => {
const id = req.params.id;
const update = req.body;
try {
await Student.update(update, { where: { id } }).then(data => {
res.json(data);
});
} catch (error) {
console.log(error);
}
});
studentRoute.delete("/:id", async (req, res, next) => {
const id = req.params.id;
try {
Student.destroy({ where: { id } }).then(data => {
res.json(data);
});
} catch (error) {
console.log(error);
}
});
studentRoute.post("/", async (req, res, next) => {
try {
const logs = new Student(req.body);
const entry = await logs.save();
res.json(entry);
} catch (error) {
if (error.name === "ValidationError") {
res.status(422);
}
next(error);
}
});
module.exports = studentRoute;
Это модель курса
const express = require("express");
const courseRoutes = express.Router();
const Course = require("./db");
courseRoutes.get("/", async (req, res, next) => {
try {
await Course.findAll().then(docs => {
const response = {
count: docs.length,
courses: docs
};
res.json(response);
});
} catch (error) {
console.log(error);
}
});
courseRoutes.get("/:id", async (req, res, next) => {
const id = req.params.id;
try {
Course.findByPk(id).then(data => {
console.log(data);
res.json(data);
});
} catch (error) {
console.log(error);
}
});
courseRoutes.put("/:id", async (req, res, next) => {
const id = req.params.id;
const update = req.body;
try {
await Course.update(update, { where: { id } }).then(data => {
res.json(data);
});
} catch (error) {
console.log(error);
}
});
courseRoutes.delete("/:id", async (req, res, next) => {
const id = req.params.id;
try {
Course.destroy({ where: { id } }).then(data => {
res.json(data);
});
} catch (error) {
console.log(error);
}
});
courseRoutes.post("/", async (req, res, next) => {
try {
const logs = new Course(req.body);
const entry = await logs.save();
res.json(entry);
} catch (error) {
if (error.name === "ValidationError") {
res.status(422);
}
next(error);
}
});
module.exports = courseRoutes;
Это express сервер
require("dotenv").config();
const express = require("express");
const app = express();
const morgan = require("morgan");
const helmet = require("helmet");
const cors = require("cors");
const studentRoute = require("./models/studentRoute");
const courseRoutes = require("./models/courseRoutes");
app.use(morgan("common"));
app.use(helmet());
app.use(cors());
app.use(express.json()); //body Parser
//Routes
app.use("/students", studentRoute);
app.use("/courses", courseRoutes);
const port = process.env.PORT || 5000;
app.listen(port, () => console.log(`? App is listening at port ${port}!`));