포시코딩

2월3일 - devCity 프로젝트 시작 본문

TIL

2월3일 - devCity 프로젝트 시작

포시 2023. 2. 3. 13:12
728x90

새 프로젝트 시작하고 이틀동안 기획하느라 TIL 쓸 거리도 안생기고 시간조차 없다가 이제야 쓴다.

새롭게 프로젝트를 시작하며 겪은 문제들에 대해 정리해보았다.

 

multer 이미지 파일명 한글 깨짐 현상

예전에 multer 사용할 때 파일명이 깨지는 현상이 발생하여

파일명에 대해

file.originalname = Buffer.from(file.originalname, 'latin1').toString('utf8');

이렇게 세팅해주는 과정을 거쳐 해결했었는데

 

비슷하게 문제를 겪어 이 방법을 알려줬던 다른팀의 한분이 

새로운 해결 방법을 알려주셨다.

 

'Content-Type': 'multipart/form-data; charset=UTF-8'

서버로 이미지 저장 요청을 보낼 때 header에  위 내용을 실어 보내면 처음 방법처럼 안해도 된다고 한다.

이 방법은 나중에 하게 되었을 때 잘 되나 확인 필요

 

controller에서 request 못받는 현상

예전에도 프로젝트 새로 시작했을 때 겪었던 문제인데

단순히 body-parser를 미들웨어로 등록해주지 않아서 발생한 문제다.

 

app.js

app.use(express.json());
app.use(express.urlencoded({ extended: true }));

app.js에 위 내용 추가로 해결

 

sequelize/config/config.js에서 env 못읽는 현상

더보기

AccessDeniedError [SequelizeAccessDeniedError]: Access denied for user ''@'localhost' (using password: NO)
    at ConnectionManager.connect (/Users/seonghun/code/sample/dev_shop/node_modules/sequelize/lib/dialects/mysql/connection-manager.js:94:17)
    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
    at async ConnectionManager._connect (/Users/seonghun/code/sample/dev_shop/node_modules/sequelize/lib/dialects/abstract/connection-manager.js:220:24)
    at async /Users/seonghun/code/sample/dev_shop/node_modules/sequelize/lib/dialects/abstract/connection-manager.js:174:32
    at async ConnectionManager.getConnection (/Users/seonghun/code/sample/dev_shop/node_modules/sequelize/lib/dialects/abstract/connection-manager.js:197:7)
    at async /Users/seonghun/code/sample/dev_shop/node_modules/sequelize/lib/sequelize.js:304:26
    at async MySQLQueryInterface.tableExists (/Users/seonghun/code/sample/dev_shop/node_modules/sequelize/lib/dialects/abstract/query-interface.js:102:17)
    at async Admin.sync (/Users/seonghun/code/sample/dev_shop/node_modules/sequelize/lib/model.js:939:21)
    at async Sequelize.sync (/Users/seonghun/code/sample/dev_shop/node_modules/sequelize/lib/sequelize.js:376:9) {
  parent: Error: Access denied for user ''@'localhost' (using password: NO)
      at Packet.asError (/Users/seonghun/code/sample/dev_shop/node_modules/mysql2/lib/packets/packet.js:728:17)
      at ClientHandshake.execute (/Users/seonghun/code/sample/dev_shop/node_modules/mysql2/lib/commands/command.js:29:26)
      at Connection.handlePacket (/Users/seonghun/code/sample/dev_shop/node_modules/mysql2/lib/connection.js:487:32)
      at PacketParser.onPacket (/Users/seonghun/code/sample/dev_shop/node_modules/mysql2/lib/connection.js:94:12)
      at PacketParser.executeStart (/Users/seonghun/code/sample/dev_shop/node_modules/mysql2/lib/packet_parser.js:75:16)
      at Socket.<anonymous> (/Users/seonghun/code/sample/dev_shop/node_modules/mysql2/lib/connection.js:101:25)
      at Socket.emit (node:events:513:28)
      at addChunk (node:internal/streams/readable:324:12)
      at readableAddChunk (node:internal/streams/readable:297:9)
      at Readable.push (node:internal/streams/readable:234:10) {
    code: 'ER_ACCESS_DENIED_ERROR',
    errno: 1045,
    sqlState: '28000',
    sqlMessage: "Access denied for user ''@'localhost' (using password: NO)",
    sql: undefined
  },
  original: Error: Access denied for user ''@'localhost' (using password: NO)
      at Packet.asError (/Users/seonghun/code/sample/dev_shop/node_modules/mysql2/lib/packets/packet.js:728:17)
      at ClientHandshake.execute (/Users/seonghun/code/sample/dev_shop/node_modules/mysql2/lib/commands/command.js:29:26)
      at Connection.handlePacket (/Users/seonghun/code/sample/dev_shop/node_modules/mysql2/lib/connection.js:487:32)
      at PacketParser.onPacket (/Users/seonghun/code/sample/dev_shop/node_modules/mysql2/lib/connection.js:94:12)
      at PacketParser.executeStart (/Users/seonghun/code/sample/dev_shop/node_modules/mysql2/lib/packet_parser.js:75:16)
      at Socket.<anonymous> (/Users/seonghun/code/sample/dev_shop/node_modules/mysql2/lib/connection.js:101:25)
      at Socket.emit (node:events:513:28)
      at addChunk (node:internal/streams/readable:324:12)
      at readableAddChunk (node:internal/streams/readable:297:9)
      at Readable.push (node:internal/streams/readable:234:10) {
    code: 'ER_ACCESS_DENIED_ERROR',
    errno: 1045,
    sqlState: '28000',
    sqlMessage: "Access denied for user ''@'localhost' (using password: NO)",
    sql: undefined
  }
}

(검색을 위해 접은글에 에러내용 넣어놓음)

 

분명히 env에 세팅된대로 sequelize를 통해 migrate해서 DB랑 table도 잘 만들었는데

이상하게 model들의 연결이 안되고 있었다.

 

웃긴건 위 코드 그대로 다른 프로젝트에서는 잘 되고

심지어 같은 프로젝드에 대해 다른 사람 pc에서도 잘 된다는걸 들었을 때 그냥 멘붕 🙉

 

다행히도 비슷하게 겪었던 일이 있어

env 파일의 경로 문제로 생각되어 경로를 이리저리 바꿔보았다.

 

첫 번째 방법

config.js와 같은 경로인 sequelize/config에 env파일을 넣고 아래와 같이 path를 변경했다.

// require('dotenv').config({ path: '../../.env' });
require('dotenv').config({ path: './.env' });

결과는 잘 됐지만 이럴 경우 나중에 migration 파일을 만들어 sequelize-cli를 통해 작업할 때

문제가 생길 가능성도 있고

제일 문제가 될 수 있는 다른 곳에서 env를 가져다 쓰는 상황과

env파일의 위치를 찾기 힘들어진다는 점 때문에 보류

 

두 번째 방법

// require('dotenv').config({ path: '../../.env' });
require('dotenv').config();

아예 경로를 없애 봤는데 잘됐다..

저번에는 경로가 없어서 문제였는데

도대체 뭘까 .. 일단 이 방법을 채택하여 사용하기로 했는데

너무 찝찝.. 나중에 다른 팀원들과 merge하며 문제 없는지 확인해봐야 할 것 같다.

728x90