본문 바로가기

Express

(7)
[What To Do] JWT 인가 미들웨어 제작하기 우리 팀은 애플리케이션에 로그인한 사용자만 추가 기능을 사용할 수 있도록 개발하고 싶었습니다.그러기 위해서는 인가 방식을 선택해야 했습니다.팀에서는 세션과 JWT 중 하나로 구현하자고 의견이 좁혀졌고,준비한 서버가 없는만큼 서버의 역할부담을 덜고 싶어, JWT를 최종적으로 채택하게 되었습니다.토큰 발급토큰은 구글의 OAuth 2.0을 통해 얻은 이메일을 데이터베이스에 생성하거나 이미 존재하면 생성합니다.const jwt = require('jsonwebtoken');const payload = { id: user.id};const options = { subject: 'user', expiresIn: '1h', issuer: process.env.JWT_ISSUER};const token = jw..
[Express] 유효성 검사를 해보자 미니 프로젝트로 만든 API에 사용자의 아이디를 입력할 때,문자열이 아닌 정수형으로 입력해도 데이터가 전달되지만데이터베이스에서는 컬럼의 자료형과 달라서 에러를 뱉습니다.이처럼, 클라이언트에서 전달한 데이터를 서버에서 그대로 사용하면예기치 못한 문제가 생길 수 있습니다.이를 예방하기 위해서 전송받은 데이터를 검사하는 것을 유효성 검사라고 합니다.이번 포스트에서는 Express-validator를 써서 유효성 검사를 하는 방법을 알아보겠습니다.💡 express-validator 설치하기진행하고 있는 프로젝트에서 패키지 매니저를 통해 설치하면 됩니다.npm install express-validator 💡 유효성 검사 시작하기공식 문서에서는 express-validator가 Express 애플리케이션 뿐만..
[Express] Router 적용하기 애플리케이션이 커질수록 라우트 설정과 미들웨어가 복잡해집니다.라우터를 이용하면 각각을 모듈로 만들고,메인 애플리케이션에서 마운트하여 작은 단위로 관리할 수 있습니다.이번 포스트에서는 라우터의 사용법에 대해서 알아보겠습니다.🎯 모듈 분리예시로 쇼핑몰 애플리케이션에서는,사용자와 상품을 담당하는 엔드포인트가 나누어져 있을 수 있습니다.express.Router()를 사용하면 각 엔드포인트를 모듈식으로 관리할 수 있습니다.// users.jsconst express = require('express');const router = express.Router();// GET /usersrouter.get('/', (req, res) => { res.send('유저 리스트');});module.exports = ..
[Express] 같은 경로의 핸들러 묶기 API는 같은 주소지만 HTTP 메소드를 다르게 하여 다양한 기능을 할 수 있습니다.동일한 주소를 하나로 묶어서 관리할 수는 없을까요?두 가지 예제를 보면서 알아보겠습니다.app.get('/event/:n', (req, res) => { // n회차 이벤트 당첨자 출력});app.post('/event/:n', (req, res) => { // n회차 이벤트 당첨자 생성});app.put('/event/:n', (req, res) => { // n회차 이벤트 당첨자 수정});app.delete('/event/:n', (req, res) => { // n회차 이벤트 당첨자 삭제});매우 직관적인 단일 라우트 방식입니다.동일한 경로에 대한 처리이다 보니 반복되는 코드가 많습니다.그럼 동일한 경로를 관..
[Express] 폴더 구조 알아보기 웹 애플리케이션은 다양한 방식으로 구현이 가능합니다.마이크로서비스 아키텍처에 관심이 생겨서 이번에 당근 밋업을 신청했는데성공하면 좋겠네요😂다시 주제로 돌아와서 구현 방식이 다양한만큼 그 계층 구조도 다양할 수밖에 없습니다.공식 페이지의 가이드를 따라서 Express 프로젝트를 생성하면 새로운 폴더 구조가 만들어지는데,이번 포스트에서 이것을 다뤄보도록 하겠습니다.📁 public정적 파일을 제공하기 위한 디렉토리입니다.디렉토리의 하위는 다음과 같이 구분되어 있습니다.images: 이미지 파일javascripts: 자바스크립트 파일stylesheets: css 파일  📁 routes애플리케이션의 라우팅 정보를 관리하는 디렉토리입니다.각 라우터 파일은 특정 URL 경로에 대한 요청을 처리합니다.  📁 v..
Express - Path에 매개변수 사용하기 팬 메이드 게임 중 하나인 포켓로그 다들 해보셨나요?포켓몬 도감을 만들고 싶으면 어떻게 하면 좋을까요?poketmons 라는 페이지를 만들어 여기에 라우팅을 해주면 됩니다.그렇다면, 도감에 있는 포켓몬 중 하나를 보고 싶다면..?슬래시 뒤에 도감 번호로 분리하여 페이지를 만들어주면 됩니다.아...무수히 많은 페이지를 생성해야 할까요?✍ 경로 파라미터(Route Parameter)app.get('/poketmons/:no', function(req, res) { res.send(req.params); })// url: /poketmons/1// response: { "no" : "1" }콜론을 사용하면 URL에 입력한 값을 매개 변수로 사용할 수 있습니다. ✍ Map 객체 사용하기let db = new M..
Express - 단순하게 API 제작하기 오늘의 주제는 백엔드 프레임워크 중 인지도가 높은 Express입니다.이렇게 압도적인 인기의 비결은 뭘까요?🤔간단한 라우팅브라우저에서 경로를 요청하고 웹 페이지를 받는 것을 페이지 라우팅이라고 합니다.express에서는 다음과 같은 구조로 라우트 정의를 합니다.app.METHOD(PATH, HANDLER);METHOD: HTTP 요청 메소드PATH: 경로HANDLER: 실행할 콜백 함수 간단한 응답사용자가 경로를 요청했을 때 응답은 어떻게 보낼 수 있을까요?express는 이를 지원하는 다양한 메소드가 있습니다.res.send(): 다양한 유형의 응답을 지원합니다.res.json(): JSON 응답을 전송합니다.다른 메소드는 이 사이트에서 확인할 수 있습니다.작은 서비스를 개발할 때는 사용법이 단순한 ..