액티브 스킬/노드 9

<노드> joi 라이브러리(validator) 에러: Cannot read property 'presence' of undefined

👾 joi 게시글 업로드시 제목, 작성자, 게시글 등의 타입 확인, 글자수 제한 같은 확인이 필요합니다. joi 라이브러리를 사용하면 이를 쉽게 구현할 수 있습니다. 1. 스키마를 정의합니다. (=검증에 필요한 내용 작성) 2. 옵션을 설정합니다. (=검증 방법에 대한 설정, 에러가 발생해도 나머지 데이터에 대한 검증을 계속할 것인지 등) 3. 에러 또는 결과를 받아와서 결과를 처리합니다. 위 코드와 같이 미들웨어로 작성한 경우 아래처럼 활용할 수 있습니다. Cannot read property 'presence' of undefined `"title" failed custom validation because Cannot read property 'presence' of undefined` 에러가 발생..

<Node.js> 쿠키-세션

🎯 { express-session } 언제 사용하나요? 주로 유저 데이터를 서버에 저장하여 페이지를 요청하는 사람이 인증된 유저인지 확인하기 위해 사용합니다. 왜 사용하나요? JWT 방식과 비교하여 보안성이 우수하다고 이야기하는 경우가 많습니다. 하지만 JWT의 보안성에 문제가 없다는 의견도 있기 때문에 다음에는 보안을 집중적으로 다루도록 하겠습니다. 무엇인가요? express-session 미들웨어를 활용한 서버측 데이터 저장 방식입니다. 어떻게 사용되나요? 1. 쿠키에 세션 아이디를 담아서 서버에 요청을 보냅니다. 2. express-session 미들웨어를 설정해 둡니다. 3. req.session.이름 객체를 통해 데이터를 저장하고 불러옵니다. Q. JWT vs 쿠키-세션 선택 기준은?

<Node.js> express.urlencoded가 필요한 이유

🎯 { express.urlencoded } 언제 사용하나요? express 서버로 POST 요청을 할 때 input 태그의 value를 전달하기 위해 사용합니다. 무엇인가요? 요청의 본문에 있는 데이터를 해석해서 req.body 객체로 만들어주는 미들웨어입니다. 왜 사용하나요? 요청의 본문에 있는 데이터가 URL-encoded 형식의 문자열로 넘어오기 때문에 객체로의 변환이 필요합니다. cf) JSON 문자열로 넘어오는 경우 express.json() 미들웨어를 사용합니다. 어떻게 사용하나요? 예전에는 body-parser 패키지를 별도로 설치해야 했지만 express v4.16.0 부터 내장 라이브러리가 되었습니다. 1. POST 요청으로 input 태그의 값을 전달합니다(서버에서 name 속성으로 ..

<Node.js> __dirname 이해하고 가기

🚀 { __dirname } 무엇인가요? "__"는 자바스크립트에서 기본적으로 정의된 변수에 붙습니다. "dirname"은 directory와 name의 합성어입니다. 현재의 파일(file)이 위치한 폴더(directory)의 절대경로(absolute path)를 알려줍니다. cf) process.cwd()는 항상 프로젝트 폴더(directory)를 반환합니다. cf) __filename은 현재 파일명을 알려줍니다. 어떻게 사용하나요? __dirname는 환경 변수(environment variable)로써 따로 정의할 필요없이 사용할 수 있습니다. // index.js console.log(`process.cwd(): ${process.cwd()}`); console.log(`__dirname: ${_..

<Node.js> TypeError: expressHandlebars is not a function

⚔️ 노드의 뷰 엔진으로 handlebars를 적용하다가 아래와 같은 에러가 발생하였습니다. TypeError: expressHandlebars is not a function const expressHandlebars = require("express-handlebars"); app.engine( "handlebars", expressHandlebars({ defaultLayout: "main", }) ); 아래 둘 중 하나로 고치면 해결됩니다. const expressHandlebars = require("express-handlebars"); app.engine( "handlebars", expressHandlebars.engine({ defaultLayout: "main"..

<Node.js> multer middleware

🐣 미들웨어란? 라우터와 컨트롤러 사이에 필요한 처리를 한다. multer란? 파일을 업로드하게 해준다. 왜 사용하는지? 파일을 업로드하기 위해서 사용한다. 어떻게 사용하는지? https://www.npmjs.com/package/multer 1. 설치 $ npm install --save multer 2. HTML form 요소 설정 (enctype 설정 중요) 3. 컨트롤러 파일 작성 const express = require('express'); const multer = require('multer'); const upload = multer({ dest: 'uploads/' }); const app = express(); app.post('/profile', upload.single('avata..

<Node.js> Express (Routes, Controllers, URL parameter)

📌 import "[풀스택] 유튜브 클론코딩 (nomadcoders.co)"; Router 무엇인가? URL을 모듈화하여 정리하는 방법 어떻게 사용하는가? 1-1. 라우터 생성 - const [변수명]videoRouter = express.Router(); 1-2. 라우터 export - export default [변수명]videoRouter; (한 파일에서 한번만 가능) import express from "express"; import {watch, edit} from "../controllers/videoController.js"; const videoRouter = express.Router(); videoRouter.get("/:id(\\d+)", watch); videoRouter.get("..

<Node.js> npm run dev 실행 속도 문제

1. 윈도우 폴더(디렉토리)에서 실행시 속도 느림 1-1. 터미널을 통해 프로젝트 폴더를 우분투 폴더로 이동 $ mv 폴더명 ~/ *mv => move(이동) *폴더명 => 해당 폴더를 *~/ => 우분투 root>home>사용자명 폴더 아래로 2. address already in use :::5000 - 이미 실행 중이라는 에러 발생 2-1. 터미널에서 프로세스 리스트 탐색을 통해 해당 포트를 사용하는 node의 PID를 찾아 강제 종료 $ lsof -i TCP:5000 *lsof -i => 활성화 중인 프로세스 리스트 탐색 $ kill -9 [PID] *kill -9 => 강제종료 *[PID] => 해당 프로세스를 ※ 참고자료 - https://jootc.com/p/201912253249 3. 사이..

<Node.js> App 제작 (파일을 이용해 본문 구현) - 생활코딩

var http = require('http'); var fs = require('fs'); var url = require('url'); var app = http.createServer(function(request,response){ var _url = request.url; var queryData = url.parse(_url, true).query; var title = queryData.id; if(_url == '/'){ title = 'Welcome'; } if(_url == '/favicon.ico'){ return response.writeHead(404); } response.writeHead(200); fs.readFile(`data/${queryData.id}`, 'utf8', ..