서버/Express 17

ExpressJS CORS(Cross-Origin-Resource-Sharing)

ExpressJS CORS(Cross-Origin-Resource-Sharing) 클라이언트(브라우저)의 요청 도메인과 응답 받는 서버 도메인이 다를 경우 브라우저가 발생시키는 에러 - 웹 개발자라면 무조건 보게되는 에러(앱은 웹뷰 사용 시 CORS 에러 발생) - 클라이언트(서버)에서 서버로 요청 보낼 경우는 발생하지 않음 - 브라우저에서 발생 시키는 문제지만 응답을 보내주는 서버에서 처리해야 함 - 서버 응답(Response Headers)에 Access-Control-Allow-Origin을 넣어주면 해결 가능(req.setHeaders) cors 설치 - cors 모듈 전역 라우터 설정 - cors 메서드 사용 - origin: 요청 허용 할 도메인 모두("*") 여러개면 배열로 ["http:lo..

서버/Express 2022.03.28

ExpressJS JWT

Nodejs Express JWT JSON 형식 데이터를 저장하는 토큰 3가지 형식으로 구성된다. 1. 헤더(HEADER) 토큰의 종류와 해시 알고리즘 정보 저장된다. 2. 페이로드(PAYLOAD) 데이터가 인코딩되어 저장된다. 3. 시그니처(SIGNATURE) 일련의 문자열 시그니처를 통해 토큰이 변/위조되었는지 파악 확인한다. 시그니처는 JWT 비밀키로 만들어진다. 비밀키가 노출되지 않는 이상 변조/위조 불가능하다. WHY TO USE IT - 토큰에 내용물이 들어있어 데이터베이스에서 조회를 하지 않아도 된다. - 토큰의 시그니처에 비밀키가 노출되지 않는 이상 해킹 불가능하다. - 비밀키만 잘 관리하면 데이터(PAYLOAD)를 믿고 사용할 수 있다. - 이름 / 권한 등 민감하지 않은 정보만 넣어야 ..

서버/Express 2022.03.26

ExpressJS method-override

ExpressJS method-override form 태그에 put/delete method 사용 가능 - html form tag는 기본적으로 get/post 2가지 method만 지원 - node에서 제공하는 method-override 패키지로 사용 PUT을 form 메소드로 사용한다는 것은 말도 안 된다. 네가 form payload를 통해 PUT을 해야할 일은 없을 것이다. DELETE도 payload가 없어야만 말이 된다. 그러니 역시 form에서 제공할 이유가 없다. package / module require - package npm i method-override - module require(app.js) const methodOverride = require("method-overr..

서버/Express 2022.03.22

ExpressJS middleware

ExpressJS middleware Express는 middleware로 구성된다. - 각 라우터별로 공통으로 실행하고 싶은 코드가 있을 시 사용 - app.use()로 장착 - 위에서 아래로 순서대로 실행됨 - middleware는 req res next가 매개변수인 함수 - req res 조작 가능 - next()로 다음 middleware로 넘어감 - app.set과의 차이 : app.set은 서버 내내 유지 req res는 요청 하는 동안만 유지 - req.body나 req.cookies같은 middleware의 데이터와 겹치지 않게 조심 - app.use가 middleware가 아니라 안에있는 req res next 함수가 middleware - middleware를 app.use에 장착한거임..

서버/Express 2022.01.22

ExpressJS nunjucks

ExpressJS nunjucks 템플릿 엔 - npm i nunjucks - nunjucks const nunjucks = require("nunjucks"); app.set("view engine", "html"); nunjucks.configure("views", { express : app, watch : true, }) - 서버 변수 가져오기 : {{ 변수 }} - 내부 변수 선언 : {%set node = "node" %} {%set js = "js" %} - for in : 반복문 {$set area = ["강북구", "강남구", "강서구", "강동구"] %} {$ for item in area $} {{ item }} {% endfor %} - if : 조건문 * 조건문(if) {% if ..

서버/Express 2022.01.20

ExpressJS req res

ExpressJS req res req req.app : req 객체를 통해 app 객체에 접근 req.app.get("port")와 같은 식으로 사용 가능 req.body : body-parser 미들웨어가 만드는 요청의 본문을 해석한 객체 req.cookies : cookie-parser 미들웨어가 만드는 요청의 쿠키를 해석한 객체 req.ip : 요청 ip의 주소 req.params : 라우트 매개변수에 대한 정보가 담긴 객체 req.query : 쿼리스트링에 대한 정보가 담긴 객체 req.signedCookies : 서명된 쿠키들은 req.kookies 대신 여기에 담겨있음 req.get(헤더 이름) : 헤더의 값 res res.app : req.app처럼 res 객체를 통해 app 객체에 접근 ..

서버/Express 2022.01.20

ExpressJS multer

ExpressJS multer form 태그 속성이 multipart/form-data 본문을 해석 - multer 함수 호출 - multer 자체가 미들웨어라기보다 multer 함수안에 4개의 미들웨어가 있음 - 실제 운영 시에는 서버 디스크 대신에 S3같은 스토리지 서비스(클라우드)에 저장 - 클라이언트 요청(single) 전송 - 클라이언트 요청(fields) 전송 - 서버 응답 const fs = require("fs").promises; const path = require("path"); const multer = require("multer"); - 폴더 생성 fs.readdir("uploads") .then((req, res, next) => { }) .catch((err) => { con..

서버/Express 2022.01.20