서버 36

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

NodeJS dotenv

NodeJS dotenv 비밀키 관리하는 파일 - 키=값 줄바꿈 형식으로 작성 - 세미콜론 붙이면 안됨 - 최대한 위에 작성 - 파일은 만들지만 Github/클라우드 등 서비스에 파일을 올리진 않음 - 비밀번호를 하드코딩하지 않는 건 기본 - app.js(dotenv 사용 페이지) - npm i dotenv - 프로젝트 폴더 안 .env 폴더 생성(확장자 없음) const dotenv = require("dotenv") dotenv.config() - .env COOKIE_SECRET=admin DB_PASSWORD=admin

서버/Node 2022.01.20

NodeJS NPM semver package.json

NodeJS NPM semver package.json 노드 패키지 관리 매니저 - 다른 사람들이 만든 소스 코드들을 모아둔 저장소 - 남의 코드를 사용하여 개발 가능 - 이미 있는 기능을 다시 구현할 필요가 없어 효율적 - 오픈 소스 생태계를 구성중 - 패키지는 NPM에 업로드된 node 모듈 - 패키지도 다른 패키지 사용 가능 의존 관계라고 부름 - 명렁어 npm start : package.json "start" 속성 실행 npm ls : 현재 프로젝트에 어떤 패키지가 사용되고 있는지 확인 npm outdated : 어떤 패키지에 기능 변화가 생겼는지 알 수 있음 npm uninstall 패키지명 : 패키지 삭제(npm rm 패키지명으로도 가능) npm search 검색어 : npm 패키지 검색(n..

서버/Node 2022.01.19

NodeJS fs

NodeJS fs 파일 시스템에 접근하는 내장 모듈 - 파일/폴더 생성 삭제 읽기 쓰기 가능 - browser는 제한적이었으나 노드는 권한을 가지고 있음 fs / 프로미스 문법 지원 const fs = require("fs").promises; - fs.readFile("경로", (err, data)) : 파읽 읽기 data에 내용이 들어있음 fs.readFile("./text.txt") .then((data) => { console.log(data.toString()); }) - fs.writeFile("경로 파일명", "내용") : 파일 생성 fs.writeFile("./text.txt", "text입니다."); .then(() => { }) .catch((err) => { console.error(..

서버/Node 2022.01.18

NodeJS exception 예외 처리

NodeJS exception 예외 처리 처리하지 못한 에러 - 서버 스레드를 멈추게 함 - 노드는 기본적으로 싱글 스레드라 스레드가 멈춘다는 건 프로세스가 멈춘다는 거 - 에러 처리는 필수 - try catch - 기본적으로 에러가 발생할 만한 코드를 try catch로 감쌈 setInterval(() => { try { throw new Error("에러 발생"); } catch(err) { console.error(err); } }, 1000); - node 비동기 메서드의 err는 따로 처리하지 않아도 됨 const fs = require("fs").promises; setInterval(() => { fs.readFile("./text.txt") .then((data) => { throw new..

서버/Node 2022.01.18

NodeJS process

NodeJS process 현재 실행중인 node 프로세스에 대한 정보를 담고 있음 - 파일 폴더 경로와 마찬가지로 node는 운영체제에 접근 할 수 있음 - 컴퓨터마다 출력값이 다를 수 있음 - process process.version : 현재 설치된 node 버전 process.arch : 아키텍처 정보(arm ia32) process.platform : 운영체제 정보(linux darwin(맥) freebsd) process.pid : 프로세스 아이디(프로세스별로 구분과 강제 종료 시 사용) process.uptime() : 프로세스 시작 후 경과 시간 process.execPath : node 설치 경로 process.cwd() : 현재 프로세스가 실행되는 위치(__filename/__dirna..

서버/Node 2022.01.18