[TIL] 03.09 Cannot set headers...,검색 query

2020. 3. 9. 22:27TIL

DB로 엑셀파일을 넣는중 Cannot set headers after they are sent to the client 이런 에러가 발생하였다. 

클라이언트로 중첩된 응답이 가게되어 발생하는 에러라고 한다. for문을 돌면서 계속 Response를 해준게 원인이였던것 같다. 

router.post("/", async function(req,res,next){
  let workbook = XLSX.readFile(__dirname + "/../../adress.xlsx")
  let worksheet = workbook.Sheets["시트1"]

  for(let i = 1; i <= 1100; i++){
    await db.adresses.create({
      section: worksheet["A"+i].v,
     ....
    })
    .then( ()=> {
    // for문이 끝나면 요청을 보내주도록 해주었다. 
      if(i === 1100){
        res.json({
          message: "성공"
        })
      }
    })
    .catch((err) => console.log(err))
  }
})

위와 같이 수정을 하여 해결하였다. 

 

검색 API 를 만들어 주는데 seqeulizer에  [Op.like] 라는 것이 있었다. [Op.like]: `%${searchVal}%`} 이런 식으로 사용이 된다. 

const db = require("../../models")
const sequelize = require("sequelize")
const Op = sequelize.Op;

router.get("/", (req, res) => {
  let searchVal = req.body.val

  db.test.findAll({
    where: {adress: {[Op.like]: `%${searchVal}%`}}
  })
  .then(val => res.json(val))
  .catch(err => console.log(err))
})

 

DB자료를 csv 파일로 export하는 작업을 해주었다. 아래의 쿼리문으로 가능했다. 

SELECT * FROM test 
INTO OUTFILE '/var/lib/mysql-files/test.csv' 
FIELDS TERMINATED BY ',' 
ENCLOSED BY '"' 
LINES TERMINATED BY '\n';

 하지만  The MySQL server is running with the --secure-file-priv option so it cannot execute this statement 라는 에러가 발생하였다. 

 

secure-file-priv 는 파일이 import/export 되는 경로라고 한다. 이 경로에 맞게 적어주어야 한다. 

저 경로를 확인하기 위해서 아래의 쿼리문을 사용한다. 

select @@global.secure_file_priv;

또는

show variables like "secure_file_priv";

 

나는 경로가 null이라고 나왔는데 이걸 수정을 해줘야 했다. 수정은 아직 하지 못하였다. 내일 이어서 진행해보아야 겠다.