디버깅 다이어리

    jenkins CI CD 구축 디버깅

    첫번째 Permission denied 오류 git에 권한 없이 커밋을 했다. git ls-tree HEAD로 권한 확인한 다음 권한을 나타내는 숫자가 644로 돼있는 파일들의 권한을 실행 가능하도록 바꿔준다. git update-index --chmod=+x [파일이름] 실행 권한 부여 그 후 커밋하고 푸시해준다. 두번째 Jest Permission denied 오류 깃에 모듈파일들을 함께 올려 Jest 모듈에서 충돌이 난듯하다. 세번째 제스트 테스트 코드가 실행이 종료되지 않아 젠킨스에서 테스트 코드가 계속 돌아갔다. "scripts": { "test": "jest --detectOpenHandles --forceExit" }, 위처럼 프로젝트의 package.json 스크립트 부분에 옵션을 추가한다..

    Node.js Joi 검증과증에서 오류

    오류 발생 코드 const postPutSchema = Joi.object({ title: Joi.string().min(1).max(100).allow(null, "").required(), postImg: Joi.string().allow(null).required(), content: Joi.string().max(1000), }); let { title, postImg, content } = await postPutSchema.validateAsync(req.body); 위 코드에서 req.body는 postId 값도 전달한다. 왼쪽의 변수에 구조분해할당을 해주는 것은 문제가 없지만 문제는 joi 라이브러리로 검증하는 과정에서 스키마에 정의되지 않은 값을 검증하게 되면 오류가 난다. 해결 cons..

    Node에서 jest로 테스트코드를 작성할 때 오류해결

    오류코드 const request = require("supertest"); const app = require("../app"); test("API test router_like", () => { const response = request(app) .post("/api/like") .set( "authorization", "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOjgsImlhdCI6MTYyNjc5MDkzMX0.5xtnEb_L64jOvh_oGSaPSfJ1b9-pr2lzJxf5BrIZ5r8" ) .send({ postId: 8, }); expect(response.status).toEqual(412); }); 오류 원인 1. test에 http 요청 함수..

    Mysql subquery 오류

    `SELECT userId, nickname, profileImg FROM Users LIMIT ${start},${limit} WHERE userId = (SELECT followerUserId FROM Follows where followUserId = ${userId})` 위와 같은 query 문에서 두가지 오류가 있었다. 첫째는 LIMIT를 마지막에 적어줘야 한다는 것이다. LIMIT는 데이터 검색이 다 되고 그 결과값 중에 출력할 범위를 지정한다. 따라서 제일 마지막에 있는 것이 맞다. 두번째는 userId를 =으로 비교해준 것이다. =은 일대일 비교인데 SELECT followerUserId FROM Follows where followUserId = ${userId} 문은 결과로 여러줄의 튜..

    Joi 검증에서 에러

    Object를 joi 검증하는 과정에서 실수 const userIdSchema = Joi.number().required(); const { userId } = await userIdSchema.validateAsync(res.locals.user); res.locals.user는 object이다. 따라서 userIdSchema를 변경해 주어야 한다. const userIdSchema = Joi.object({ userId: Joi.number().required() }) userIdSchema가 이런 형태가 되어야 한다.

    JSON에 적절한 값을 주지 못해 값을 못 찾았던 문제

    `SELECT u.userId, u.nickname, u.profileImg, a.type, CASE when a.receiverUserId IN (SELECT followUserId FROM Follows where followerUserId = a.giverUserId) then "true" else "false" end as follow FROM Alarms as a JOIN Users as u ON u.userId = a.giverUserId and a.receiverUserId = ${userId} and a.type = ${alarmType} LIMIT ${start},${limit}` 위의 쿼리문에서 쿼리문의 결과를 알기 위해 인섬니아에서 다음과 같은 JSON 값을 날렸다. { "alarmT..

    req.body에 아무값이 안찍히는 문제 (인섬니아 실수)

    보내는 쪽에서 헤더에 Content-Type: application/json가 없어서 데이터가 json형태로 전달되지 않았다. 원래 인섬니아로 데이터를 보낼 때 헤더에 Content-Type: application/json가 자동으로 설정되어 있지만 헤더를 만지는 과정에서 실수로 지우고 잊었다. 헤더에 Content-Type: application/json을 다시 설정해 줬더니 잘 작동했다.

    쿠키 활용한 로그인 과정 디버깅

    1. api/login으로 쿠키값을 저장하지 않고 바로 인섬니아로 내가 쓰려는 api만 호출해줬다. 쿠키값이 없기 때문에 auth-middleware에서 에러가 났다. 2. 인섬니아가 브라우저처럼 작동하는데 크롬 브라우저에 로그인을 해서 쿠키를 저장해놓고 인섬니아로 다른 api를 호출해서 쿠키값이 저장되지 않았다. 3. require("../models") 로 db 스키마를 호출하지 않고 쿼리문을 사용했다.

    sequelize update, destroy 실패했을 때

    실패해도 error가 아니라서 catch에서 잡히지 않고 반환값을 0을 준다. 따라서 try catch문이 따로 필요없다.