str.replace(" ". ""); //1
str.replace(/ /g, ""); //2
문자열을 다른 문자열로 치환할 때 사용한다.
1번 같은 경우는 하나의 문자열만 치환할때 사용한다.
2번 같은 경우는 문자열내 모든 문자열을 치환(g: global)할때 사용하는 경우이다. 주의점은 /내부에 따옴표 없이 치환할 문자열만 작성해야 하는 것. i 옵션도 있는데, 영문 대소문자를 무시하고 모두 치환한다는 의미다. str.replace(/ /gi, "")
이런식으로 작성할 수 있다.
str.indexOf("a");
String
내에서 문자열 검색시에 사용하는 String
내장 메서드다.
반환값은 성공시 해당 문자의 Index를 반환하고, 실패시 -1
을 반환한다.
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;
});
배열을 정렬하기 위해 사용하는 함수이다.
문자열의 경우 함수 내에서 각 문자열의 크기를 비교하는 조건문을 넣은 담에 결과값을 반환해줘야 한다.
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'));
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 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
버전이 예전꺼라서 생긴 문제이다. 현재 버전의 mongoose
는 callback
함수의 사용이 불가하다. 그렇기에 async
/await
혹은 promise
를 사용해서 해결해 줘야한다.