관리 메뉴

Mini

24. 9. 3. 개발일지// 쿠키 본문

CS/HTTP

24. 9. 3. 개발일지// 쿠키

Mini_96 2024. 9. 4. 00:19

* const db로 여러 클래스에서 사용시, 싱글톤여부

export new Class => 싱글톤

* form -data 받아서 db에 넣기

x-www-form으로 해야함에 주의 / 그냥 form-data 아님

const member = {
    id: null,
    loginId: loginId,
    name: name,
    pw: password
};

객체 필드명 주의

서비스, 컨트롤러, 리포지토리 모두 같은 필드명을 써야함

현재 controller에서 req.body를 파싱후, member 객체로 만들고 서비스에 전달

이게 best 인지?

* query 문제

  • 결론 : rows에는 결과객체들이 배열로 담겨있다.

db.js에서 배열로 감싸서 리턴함
각각의 리포지토리에서는 바로 쓰면됨.

 

 

* 객체를 response로 찍는방법

'ok'라는 문자열을 응답으로 보내는 방법은 매우 간단합니다. Express.js를 사용한다고 가정하고, 여러 가지 방법을 소개해 드리겠습니다:

  1. res.send() 사용:
    이 방법은 가장 간단하고 직접적인 방법입니다.
res.send('ok');
  1. res.end() 사용:
    이 메서드는 응답을 종료하고 데이터를 전송합니다.
res.end('ok');
  1. res.json() 사용:
    JSON 형식으로 응답을 보내고 싶을 때 사용합니다.
res.json({ message: 'ok' });
  1. res.status().send() 사용:
    상태 코드와 함께 응답을 보내고 싶을 때 사용합니다.
res.status(200).send('ok');
  1. res.write()와 res.end() 조합:
    응답 본문을 작성한 후 응답을 종료합니다.
res.write('ok');
res.end();
  1. res.type()과 res.send() 조합:
    Content-Type을 명시적으로 설정하고 싶을 때 사용합니다.
res.type('text/plain').send('ok');

실제 사용 예시:

app.post('/register', async (req, res) => {
    try {
        // 회원가입 로직 실행
        await registerUser(req.body);

        // 성공 시 'ok' 응답
        res.send('ok');
    } catch (error) {
        // 에러 발생 시
        res.status(400).send('Error occurred');
    }
});

주의사항:

  1. 응답 형식의 일관성: API 전반에 걸쳐 일관된 응답 형식을 유지하는 것이 좋습니다. 단순히 'ok'만 보내는 것보다는 JSON 형식으로 상태와 메시지를 함께 보내는 것이 더 일반적입니다.
  2. 상태 코드: 적절한 HTTP 상태 코드를 함께 보내는 것이 좋습니다. 성공적인 요청의 경우 200 OK나 201 Created 등을 사용할 수 있습니다.
  3. 클라이언트 요구사항: 클라이언트 측에서 어떤 형식의 응답을 기대하는지 고려해야 합니다.
  4. 보안: 민감한 정보가 응답에 포함되지 않도록 주의해야 합니다.

가장 권장되는 방식:
실제 프로덕션 환경에서는 단순히 'ok'만 보내는 것보다 더 구조화된 응답을 사용하는 것이 좋습니다. 예를 들어:

res.status(200).json({
    status: 'success',
    message: 'Operation completed successfully'
});

이렇게 하면 클라이언트에서 응답을 더 쉽게 처리할 수 있고, 추후에 추가 정보를 포함시키기도 용이합니다.

 

* 쿠키만들고 res에 추가하기

결과

 

* req에서 cookie 얻고 null인지 체크하는법(?)

const cookieParser = require('cookie-parser');

const app = express();
app.use(cookieParser());

app.get('/check-cookie', (req, res) => {
    const specificCookie = req.cookies.specific_cookie_name;
    
    if (specificCookie == null) {
        res.send('Specific cookie not found');
    } else {
        res.send(`Cookie value: ${specificCookie}`);
    }
});

쿠키안에 이런게 들어있네?

 

* 쿠키 삭제구현

  • req.cookies를 하면 쿠키들이 { cookieName : uuid } {}, .... 이런식으로 들어있다.
  • 이를 순회하면서 내가 찾기를 원하는 쿠키이름을 찾는다.
  • 그것의 value를 return한다.
  • value가 uuid 이므로, 곧 sessionStore의 key이다.
  • 서버의 세션에서 지운다.
#findCookie(req, cookieName){
    if(req.cookies === null){
        return null;
    }
    //쿠키들이 들어있는 Object Type : { 쿠키이름 : uuid } , { }
    const cookies = req.cookies;
    const keys = Object.keys(cookies) // ['name', 'weight', 'price', 'isFresh']

    for (let i = 0; i < keys.length; i++) {
        const key = keys[i] // 각각의 키
        const value = cookies[key] // 각각의 키에 해당하는 각각의 값
        if(key === cookieName){
            return value;
        }
    }

  
}
expire(req){
    const sessionCookieVal = this.#findCookie(req,this.SESSION_COOKIE_NAME);
    if(sessionCookieVal){
        this.sessionStore.delete(sessionCookieVal);
    }
    console.log('expired session: '+ this.sessionStore);
}