database접근을 비동기적으로 어떻게 할까 알아보다 transaction을 알게되었고, 써먹을려다보니 무수한 에러에 마주치게되었습니다.(정작 비동기적으로 작동한다는 건 안된다는 걸 알게되었고, promise.all을 사용하면 그래도 효율을 올릴 수 있다는 걸 알았습니다.)
비동기적 작업은 안되도, transaction 은 에러를 잡을 수 있으니 좋겠다 싶어서 사용을 햇습니다.
첫 번째 , 부딪힌 에러입니다.
sequelize를 찾을 수 없다고 하는데, 분명히 sequelize = require('sequlize')를 선언햇는데도 불구하고 계속해서 에러가 떳습니다.
그래서 serching 중에 npx sequelize sequlize-cli 를 사용할 경우 데이터베이스에 이미 연결되있으니 모델에 있는 sequelize를 불러오면 해결할 수 있었습니다.
const { sequelize } = require("../models")
두 번째 에러 , 또 뭔가를 찾을 수 없다고 합니다.
searching을 하니 주로, 반복문 안에 commit을 써놓을 경우 이런 에러가 발생한다고 했는데, 저 같은 경우는 전혀 상관 없었습니다. 애초에 반복문도 사용하지않았고 try문 맨 밑에 있었으니까요.
신기한건 module.export = {} 안에서 const t = await sequelize.transaction()을 사용할 경우 에러가 뜨지않고 작동했다는 겁니다.
문제는 const t = sequelize.transaction(); 에 있었습니다. transaction이 비동기적으로 작동하다보니, module.exports = {} 밖에 선언할 때는 await를 사용할 수가 없어서 t값에 sequelize.transaction()값이 들어가 있는데 아직 동기적으로 값을 받아오기 전에 값이 들어가있었고 그 안에 rollback()이라는 함수가 없었던 것입니다.
그래서 module.exports = { } 안에서 const t = await sequelize.transaction(); 이라고 붙임으로서 해결할 수 있었습니다.