我正在使用带有Sequelize的Postgres数据库的React。 在我的项目中,我有一个承诺是“假设”使用我所在州的Album.id删除与专辑相关的所有歌曲。
**在数据库中的删除请求之后,它不删除与相册相关的歌曲行,而是删除歌曲的AlbumId的值。 **
是否有我缺少的更新
当我在服务之外和在promise中的console.log时,this.state.Album.id保持不变。 它使用适当的数字命中服务器。
这是React组件中的功能 DeleteAlbum(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})
}
})
如果我将控制台日志放在所有地方,输出就是我所期望的。从我的应用中删除两首歌只会出现问题。如果我用邮递员直接点击服务器
,我可以删除多首歌曲有什么想法吗?
答案 0 :(得分:1)
在你摧毁歌曲之前,你实际上正在摧毁这张专辑。
在这种情况下,由于他们可能添加了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) => {