Sequelize,使用React删除多行

时间:2016-12-22 07:32:28

标签: javascript mysql database reactjs sequelize.js

我正在使用带有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})
  }
})

如果我将控制台日志放在所有地方,输出就是我所期望的。从我的应用中删除两首歌只会出现问题。如果我用邮递员直接点击服务器

,我可以删除多首歌曲

有什么想法吗?

1 个答案:

答案 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) => {
相关问题