javascript - 使用 Sequalize.js 的 FK (mysql-db)
问题描述
当我通过 Sequalize.js 将数据传递到我的数据库时,除了食物表中仍然为空的 FK“shops_ID”之外,所有内容都正确存储。
我读过其他类似的主题,但没有任何帮助。
我将不胜感激任何帮助/指导。
我正在使用带有以下 db-setup 的 mysql
Shops (mysql-table)
- id (pk)
- shopName
Food (mysql-table)
- id (pk)
- foodName
- shops_ID (fk connected to "id" in shops table)
商店.js
const Sequelize = require("sequelize");
const db = require("../database/db_shops.js"); //DB connection
const shops = db.sequelize.define(
"shops",
{
id: {
type: Sequelize.INTEGER,
primaryKey: true,
autoIncrement: true
},
shopName: {
type: Sequelize.STRING
);
module.exports = shops;
food.js
"use strict";
const Sequelize = require("sequelize");
const db = require("../database/db_shops.js"); //DB connection
var shops = require("../models/shops");
const food = db.sequelize.define(
"food",
{
id: {
type: Sequelize.INTEGER,
primaryKey: true,
autoIncrement: true
},
foodName: {
type: Sequelize.STRING
},
shops_ID: {
type: Sequelize.INTEGER,
references: {
model: "shops",
key: "id"
}
}
}
);
module.exports = food;
协会.js
const food = require("./food");
const shops = require("./shops");
food.belongsTo(shops, { foreignKey: "shops_ID" });
module.exports = { food: food, shops: shops };
(编辑)这就是我将数据发布到 mysql-db 的方式:
const express = require("express");
const router = express.Router();
const cors = require("cors");
const db = require("../models/association.js");
const Shops = db.shops;
const Foods = db.food;
router.use(cors());
router.post("/sell", (req, res, next) => {
var data = req.body.foodDefined;
var food = [];
for (var i = 0; i < data.length; i++) {
food.push({
foodName: data[i].foodName,
});
}
const shops = {
shopsName: req.body.shopsName,
};
if (!errors.isEmpty()) {
res.send(errors);
} else {
Shops.create(shops)
.then(Shops => {
Foods.bulkCreate(food);
res.json({ status: Shops.shopsName + " Registered!" });
})
.catch(err => {
res.send("error: " + err);
});
}
});
module.exports = router;
解决方案
shops_ID
没有存储,因为你没有设置它。food
对象只有一个属性foodName
。您应该为每种食物添加商店 ID:
...
const preparedFood = food.map(item => {
item.shops_ID = Shops.id;
return item;
});
Food.bulkCreate(preparedFood);
值得注意的Foods.bulkCreate
是异步方法,这意味着当您发送响应时food
尚未存储,如果失败,您将收到错误,因为您无法发送两个响应。要解决它,您可以使用或在另一个块await
中发送响应。.then
推荐阅读
- multithreading - ActiveMQ 单线程到多线程...最好的设计方法是什么?
- python - 带有 mypy 类型检查的方法解析顺序 (MRO)?
- regex - 在 MongoDB 查找管道中使用字段值
- accessibility - 复杂的 aria-live 计时器进度条焦点完成加载和消息问题
- python - 无法使用 ajax 将 json 显示为 html
- mysql - 使用 spring jpa/vaadin 访问关系数据库
- java - 从文件末尾删除哈希
- angular - 我如何让 postcss 和 sass 一起工作以便顺风工作
- excel - 按计数拆分行并使用 VBA 将其粘贴到单独的工作簿中。出现语法错误;缺少运算符
- node.js - 使用 Typescript 使用 Node.js 设置 react.js