분류 전체보기

분류 전체보기

    get 요청에서 req.query로 값이 왔는지 req.body로 값이 왔는지 모를 때 처리방법

    express 프레임워크는 get 요청시 req.query와 req.body가 둘 다 사용이 가능하다. 그렇다면 둘 다 받을 수 있도록 구현해보자. Object.keys() 메서드와 삼항연산자를 활용한다. const { alarmType, start, limit } = Object.keys(req.query).length ? req.query : req.body; req.query의 키값이 있는 경우 req.query로 데이터를 받고 없을 경우 req.body로 데이터를 받게 될 것이다.

    Object.keys()

    Object.keys() 메소드는 주어진 객체의 속성 이름들을 순서대로 배열형태로 반환한다. const object1 = { a: 'somestring', b: 42, c: false }; console.log(Object.keys(object1));위 코드의 결과값으로 Array ["a", "b", "c"]이 반환된다.

    http GET에서 req.body로 값을 받을 때

    GET에서도 req.body 데이터를 받을 수 있지만 http 규약에 위배되므로 피하는 것이 좋다고 한다. 이것은 프레임워크마다 달라지는 것 같다. 스프링에서는 get으로 body를 받는 것은 작동되지 않는다고 한다. Node.js express에서는 GET에서 req.body로 데이터를 받는 것이 가능하다.

    jwt로 암호화, 해독할 때 구조분해 할당을 쓰는 이유

    { "userId": 1, "iat": 1516239022 }jwt를 쓸 때 내부적으로 iat 값이 추가되기 때문

    정규식

    정규식을 만드는 방법 두 가지 var re = /ab+c/; var re = new RegExp("ab+c"); 예시 password: Joi.string() .required() .pattern(/^(?=.*[a-zA-Z0-9])((?=.*\d)|(?=.*\W)).{6,20}$/) (?=.*[문자]) 정규식 패턴은 해당 문자가 필수로 포함되어야하는 경우에 사용하는 정규식이다. (?=.*\d) => 적어도 한개의 숫자가 있어야 한다. d는 digit을 의미한다. (?=.*\W) => 적어도 하나 이상의 단어나 숫자가 아닌 문자가 있어야 한다. (\W is equivalent to [^a-zA-Z0-9_])

    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을 다시 설정해 줬더니 잘 작동했다.

    sequelize Raw query 사용하기

    sequelize query를 사용하면 mysql 로우쿼리를 사용할 수 있다. 또한 mysql 모듈을 사용할 필요가 없어진다. mysql.createConnection도 지정할 필요가 없어진다. 사용법 기본적으로 sequelize.query는 결과 배열과 메타 데이터 (예 : 영향을받는 행의 양 등)를 포함하는 개체의 두 인수를 반환한다. const [results, metadata] = await sequelize.query("UPDATE users SET y = 42 WHERE x = 12"); // 결과는 빈 배열이되고 메타 데이터에는 영향을받는 행 수가 포함됩니다. metadata를 쓸 필요 없는 경우 다음과 같이 쓸 수도 있다. const { QueryTypes } = require('seque..

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

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