Post request mysql with foreign keys?



我试图创建一个帖子请求,假设检查发布请求的人是否登录的人,然后发布响应。我有一个客户表和一个地址表,我想对地址发出post请求,以便当登录用户插入地址时,他们的id将作为外键存储在地址表中。我的地址表是这样的:

module.exports = (sequelize, DataTypes) => {
const Address = sequelize.define("Address", {
address: {
type: DataTypes.STRING,
allowNull: false,
validate: {
notEmpty: true
}
},
city: {
type: DataTypes.STRING,
allowNull: false,
validate: {
notEmpty: true
}
},
postcode: {
type: DataTypes.STRING,
allowNull: false,
validate: {
notEmpty: true
}
},
country: {
type: DataTypes.STRING,
allowNull: false,
validate: {
notEmpty: true
}
}
});
return Address;
};

和我的客户表是这样的:

module.exports = (sequelize, DataTypes) => {
const Customers = sequelize.define("Customers", {
firstName: {
type: DataTypes.STRING,
allowNull: false,
validate: {
notEmpty: true
}
},
lastName: {
type: DataTypes.STRING,
allowNull: false,
validate: {
notEmpty: true
}
},
email: {
type: DataTypes.STRING,
allowNull: false,
validate: {
notEmpty: true
}
},
password: {
type: DataTypes.STRING,
allowNull: false,
validate: {
notEmpty: true
}
},
isAdmin: {
type: DataTypes.BOOLEAN,
default: '0',
}
});
Customers.associate = (models) => {
Customers.hasMany(models.Address, {
onDelete: "cascade",
});

Customers.hasMany(models.Orderline, {
onDelete: "cascade",
});
};

return Customers;
};

我的post request是这样的:

addressRouter.post(
'/:id', isAuth,
expressAsyncHandler( async (req, res) => {
const {id, address, postcode} = req.params;
const customer = await Customers.findOne({where: {id: id}})
const custAddress = await Address.findOne({where: {address,postcode}})
const shippingAddress = {
address: req.body.address,
city: req.body.city,
postcode: req.body.postcode,
country: req.body.country,
}
if (!customer) {
res.status(401).send({
message: "Customer Not Found",
});
}else if(custAddress){
res.status(401).send({
message: "Address already exist",
});
}else{
Address.create(shippingAddress);
res.send({
id: shippingAddress.id,
address: shippingAddress.address,
city: shippingAddress.city,
postcode: shippingAddress.postcode,
country: shippingAddress.country,
});
}
})

请不要介意isAuth函数,因为它可以工作,我可以用它为用户更新信息。我的post请求Api看起来像这样:

export const shipping = async({address, city, postcode, country}) => {
try{
const {token} = getCustomerInfo();
const response = await axios({
url: `${apiUrl}/api/${id}`,
method: 'POST',
headers: {
'Content-Type' : 'application/json',
Authorization: `Bearer ${token}`,
},
data:{
address,
city,
postcode,
country,
},
});
if(response.statusText !== 'OK'){
throw new Error(response.data.message);
}
return response.data;
}catch(err){
console.log(err);
return {error: err.response.data.message || err.message};
}
};

任何帮助都非常感谢。

您需要定义一个从'Address'到Customer的关联:

Address.associate = (models) => {
Address.belongsTo(models.Customer);
};
return Address

,当然在新创建的地址中指示customerId:

Address.create(shippingAddress);
res.send({
id: shippingAddress.id,
address: shippingAddress.address,
city: shippingAddress.city,
postcode: shippingAddress.postcode,
country: shippingAddress.country,
customerId: customer.id
});

最新更新