gpt4 book ai didi

javascript - Sequelize,使用 React 删除多行

转载 作者:行者123 更新时间:2023-11-29 11:06:44 24 4
gpt4 key购买 nike

我正在将 React 与带有 Sequelize 的 Postgres DB 结合使用。在我的项目中,我有一个 promise ,即“假设”使用我所在州的 Album.id 删除与专辑相关的所有歌曲。

** 在数据库中发出删除请求后,它不会删除与专辑相关的歌曲行,而是删除歌曲的AlbumId 值。 **

是否有我遗漏的更新

当我在服务之外进行 console.log 时,并 promise this.state.Album.id 保持不变。它命中了具有适当编号的服务器。

这是 React 组件中的函数 删除相册 (e) { e.preventDefault()

    axios.delete(`${domain}/albums/${this.state.Album.id}`)
.then((res) => {
axios.delete(`${domain}/songs/ByAlbumId/${this.state.Album.id}`)
.then((res) => {
window.location.href = '/#/'
})
.catch((error) => {
console.log('axios error', error)
})
})
.catch((error) => {
console.log('axios error', error)
})
}

这是歌曲路线的数据库

const express = require('express')
const router = express.Router()
const bodyParser = require('body-parser')
const db = require('./../models')
const Song = db.Song

router.use(bodyParser.json({ extended: false }))

const exists = (req) => {
if (typeof parseInt(req.params.id) === 'number') {
Album.findOne({
where: {
id: req.params.id
}
})
.then((album) => {
if (album) {
return true
};
return false
})
.catch((err) => {
return false
})
} else {
return false
}
}

router.delete('/ByAlbumId/:id', function (req, res) {
Song.destroy({
where: {
AlbumId: req.params.id
}
})
.then(function (data) {
return res.json(data)
})
.catch(function (err) {
return res.json({ error: err})
})
})

router.delete('/:id', function (req, res) {
if (exists) {
Song.destroy({
where: {
id: req.params.id
}
})
.then(function (data) {
return res.json(data)
})
.catch(function (err) {
return res.json({ error: err})
})
} else {
res.json({success: false})
}
})

这是专辑路线

const express = require('express')
const router = express.Router()
const bodyParser = require('body-parser')
const db = require('./../models')
const Album = db.Album

router.use(bodyParser.json({ extended: false }))

const exists = (req) => {
if (typeof parseInt(req.params.id) === 'number') {
Album.findOne({
where: {
id: req.params.id
}
})
.then((album) => {
if (album) {
return true
};
return false
})
.catch((err) => {
return false
})
} else {
return false
}
}

router.delete('/:id', function (req, res) {
if (exists) {
Album.destroy({
where: {
id: req.params.id
}
})
.then(function (data) {
return res.json(data)
})
.catch(function (err) {
return res.json({ error: err})
})
} else {
res.json({success: false})
}
})

如果我将控制台日志放在各处,输出就是我所期望的。从我的应用程序中删除两首歌曲时出了问题。如果我直接用 postman 访问服务器,我可以删除多首歌曲

有什么想法吗?

最佳答案

在毁掉歌曲之前,你实际上是在毁掉专辑。

在这种情况下,由于它们可能添加了 onDelete: 'SET NULL' 选项,因此您只需取消歌曲与该专辑的关联即可。

您的修复方法是仅替换调用的顺序:

 // First we delete the songs and then the album
axios.delete(`${domain}/songs/ByAlbumId/${this.state.Album.id}`)
.then((res) => {
axios.delete(`${domain}/albums/${this.state.Album.id}`)
.then((res) => {

关于javascript - Sequelize,使用 React 删除多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41277895/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com