2016-12-22 2 views
0

Sequelize로 Postgres DB와 React를 사용하고 있습니다. 내 프로젝트에서, 내 상태로 Album.id를 사용하여 앨범과 관련된 모든 노래를 삭제한다고 가정합니다.Sequelize, React를 사용하여 여러 행 삭제

** 앨범과 관련된 노래 행을 삭제하는 대신 데이터베이스에서 삭제 요청을 한 후 노래의 AlbumId 값을 제거합니다. **

내가 서비스의 외부와 동일하게 유지 this.state.Album.id 약속에 CONSOLE.LOG 언제

을 잃었 업데이트가 있습니다. 해당 번호의 서버에 도달했습니다.

은 내부의 함수 인 반작용 구성 요소 DeleteAlbum (전자) { 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

당신은 또한'삭제/앨범의 라우터에 대한 코드를 추가 할 수/: id'? – drinchev

+0

@drinchev 더 자세한 내용을 –

답변

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) => { 
+0

바로 알려주겠습니다. 나는 이미 그것을 시도해 왔습니다. 모든 시간에 나는 그것을 확인하기 위해 마지막으로 한 번했습니다. 나는 밖으로 뛰어 들고있다. anywho. 전에는 이런 식으로 행동하지 않았습니다. 하지만 도움을 주셔서 감사합니다. –