TIL #3

jinsu·2023년 3월 6일
0

TIL

목록 보기
3/6

Javascript

.replace()

str.replace(" ". "");	//1
str.replace(/ /g, "");	//2

문자열을 다른 문자열로 치환할 때 사용한다.
1번 같은 경우는 하나의 문자열만 치환할때 사용한다.
2번 같은 경우는 문자열내 모든 문자열을 치환(g: global)할때 사용하는 경우이다. 주의점은 /내부에 따옴표 없이 치환할 문자열만 작성해야 하는 것. i 옵션도 있는데, 영문 대소문자를 무시하고 모두 치환한다는 의미다. str.replace(/ /gi, "") 이런식으로 작성할 수 있다.

.indexOf()

str.indexOf("a");

String 내에서 문자열 검색시에 사용하는 String 내장 메서드다.
반환값은 성공시 해당 문자의 Index를 반환하고, 실패시 -1을 반환한다.

.sort()

arr.sort();
arr.sort((a, b) => {	// 오름차순(Number)
  return a - b;
});
arr.sort((a, b) => {	// 내림차순(Number)
  return b - a;
});

arr.sort((a, b) => {	// 오름차순(String)
  if (a > b) return 1;
  else if (a === b) return 0;
  else return -1;
});
arr.sort((a, b) => {	// 내림차순(String)
  if (a > b) return -1;
  else if (a === b) return 0;
  else return 1;
});

배열을 정렬하기 위해 사용하는 함수이다.
문자열의 경우 함수 내에서 각 문자열의 크기를 비교하는 조건문을 넣은 담에 결과값을 반환해줘야 한다.

Project

🔗 Reference Link

정적(static)파일 서비스

Referece

  • 정적 파일(Static File)
    직접 값에 변화를 주지 않는 이상 변하지 않는 파일을 의미한다. 예로, image, css, js 파일 등을 의미한다. Express는 이러한 정적 파일들을 손쉽게 제공할 수 있는 기능을 가지고 있다.
app.use(express.static('public'));
        
// 두 폴더 허용
app.use(express.static('public'));
app.use(express.static('files'));

// 가상 경로 지정
app.use('/static', express.static('public'));

express 변수에는 static이라는 메서드가 포함돼 있고, 이 메서드를 미들웨어로서 로드해준다. static의 인자로 전달되는 public은 디렉터리의 이름이다. 따라서, public이라는 디렉터리 밑에 있는 데이터들은 웹 브라우저의 요청에 따라 서비스를 제공해줄 수 있다. public에 저장된 파일만을 제공한다는 점에서 보안적인 이점이 있다.
예) localhost:3000/images/cat.jpg -> public/images/cat.jpg

가상 경로를 사용한 경우, public 디렉터리에 있는 파일들에 접근하려면 다음과 같이 접근해야 한다.

http://localhost:3000/static/images/kitten.png
http://localhost:3000/static/css/style.css

express.static 메서드는 node 프로세스가 실행되는 디렉토리에 상대적이기 때문에, 절대경로를 사용하는 것이 안전하다.

app.use('/static', express.static(__dirname + '/public'));

dirname, filename(ES6)

ES 모듈에서는 __dirname 변수가 없어 직접 만들어줘야 한다.

import path from 'path';
import { fileURLToPath } from 'url';

const __filename = fileURLToPath(import.meta.url);
const --dirname = path.dirname(__filename);

MongooseError: Model.find() no longer accpets a callback

MongooseError: Model.find() no longer accepts a callback

Reference
Since the callback function has been depreciated from now onwards. If you are using these functions with callbacks, use async/await or promises if async functions don't work for you.

// Clone coding
app.get("/", (req, res) => {
	TodoTask.find({}, (err, tasks) => {
		res.render("todo.ejs", { todoTasks: tasks });
	});
});

// Stackoverflow
app.get("/", (req, res) => {
	TodoTask.find({}) // find all documents
		.then((tasks) => {
			res.render("todo.ejs", { todoTasks: tasks });
		})
		.catch ((err) => {
			console.log(err);
		})
});

클론 코딩하는 코드에서 사용하는 mongoose 버전이 예전꺼라서 생긴 문제이다. 현재 버전의 mongoosecallback 함수의 사용이 불가하다. 그렇기에 async/await 혹은 promise를 사용해서 해결해 줘야한다.

profile
주니어 백엔드 개발자

0개의 댓글