TIL, WIL 230423_RESTful API, Package.json, cookies, session, 주특기 2주차 과제 관련 오류&해결
by 코딩하는짱구2023. 4. 24.
반응형
✅오늘 학습 Keyword
Restful API, package.json, 쿠키, 세션, JWT
✅개념정리
Restful API-Representational State Transfer API의 약자로, 웹 서비스와 애플리케이션 간에 데이터를 교환하기 위한 아키텍처 스타일, HTTP 메서드(GET,POST,PUT,DELETE), JSON, 상태를 유지하지않음(요청시에 모든 정보가 담겨있기 때문에 서버에서 별도의 상태 정보를 관리하지 않아도 됌)
package.json-Node.js 프로젝트에서 사용되는 파일, 프로젝트 이름, 버전, 설명등의 정보, 프로젝트에서 사용하는 패키지(모듈)들의 버전 정보 및 의존성(dependency)관리, 스크립트를 실행할 수 있는 명령어, npm init -y로 생성, 프로젝트 할때마다 생성 ㅇㅇ
쿠키-클라이언트와 서버간에 정보를 겨환할 수 있는 텍스트 파일, 로그인정보, 쇼핑카트에 추가된 정보, 클라이언트(브라우저)에 저장됌.
세션-Session, 클라이언트와 서버간의 상태를 유지하기 위한 메커니즘, 쿠키와 비슷한 개념이지만 서버측에 저장됌.
express-session 모듈을 사용하여 세션을 구현하면, 다음과 같은 기능을 제공합니다.
세션 ID를 생성하고 클라이언트에게 쿠키로 전송합니다.
세션 ID를 사용하여 서버 측에 세션 데이터를 저장합니다.
세션 ID를 사용하여 클라이언트에서 전송된 요청과 서버 측에 저장된 세션 데이터를 연결합니다.
constexpress = require('express');
constsession = require('express-session');
constapp = express();
// 세션 미들웨어 등록
app.use(session({
secret:'my-secret-key', // 세션 암호화를 위한 비밀키
resave:false,
saveUninitialized:true,
}));
// 라우터 등록
app.get('/', function(req, res) {
// 세션 데이터 설정
req.session.name = 'John';
// 세션 데이터 사용
res.send(`Hello ${req.session.name}`);
});
app.listen(3000, function() {
console.log('Server is running on port 3000');
});
JWT-JSON WEB TOKEN!! 클라이언트-서버간의 인증정보를 전송하기 위한 토큰 기반의 인증 시스템.
구성은 Header, payload, signature 로 개미
✅오늘 겪은 문제
과제 lv2 routes.posts에서 로그인 후 게시글작성 기능 구현하기
-주특기 1주차 때 만든 게시판(게시글&댓글 작성, 조회, 수정, 삭제)에 회원가입 및 로그인 기능을 추가해야한다.
-간단히 회원가입, 로그인 시스템만 만들면 된다고 생각했고 회원가입 후 로그인, 로그인시 cookies에 jwt값 생성까진 문제가 없었으나 .. 게시글을 작성하는 부분에서 계속 api가 안열리고, 아래 코드의 오류가 반복됐다.
const [authType, authToken] = (Authorization ?? '').split(' '); // Authorization이 존재하지 않으면 ''<빈 문자열 할당
//즉 authorization이 undefined거나 null일경우 빈 문자열을 할당한다.
2. 서버 문제는 해결했는데 routes.posts.js 에서 req.body를 지정해주는 곳에서 원래 있던 user변수가 선언되지 않고있다. 왜일까? 바로 사용자 인증 미들웨어를 통해 (무사히 로그인 된 상태에서) userId를 받아서 쓸 예정이므로 user는 그 전과 값이 같지 않기때문. 게시글을 반환할때 저장된 userId를 받아줄 새로운 항목이 필요하기에 post 의 schema부터 수정해줬다. 해결!