nodejs middelware
express.urlendecoded({extend:false});
미들웨어는 프로그램 사이에서 이어주는 기능을 가지게되는데
app.use(express.urlencoded({extended:false}));
이 명령어는 쿼리문을 사용할수있게 해준다.
body parser 대신사용하는것 원래는 body parser를 따로 사용해줘야했지만 mysql2로 넘어오면서 따로 사용할 필요가없어졌다.
app.use(express.static(path.join(__dirname,"public")));
제공해주신 코드는 Express 프레임워크를 사용하여 현재 디렉토리 내의 "public" 폴더에서 정적 파일을 제공하는 역할을 합니다.
각 부분에 대한 설명은 다음과 같습니다:
- app.use: 이는 Express 미들웨어 함수로, 애플리케이션의 요청-응답 주기에 미들웨어를 추가하는 역할을 합니다. 미들웨어 함수는 요청 및 응답 객체에 접근할 수 있으며 다양한 작업을 수행할 수 있습니다.
- express.static: 이는 Express 내장 미들웨어 함수로, HTML, CSS, JavaScript, 이미지 등과 같은 정적 파일을 제공합니다. 디렉토리 경로를 인수로 받아 해당 디렉토리에서 파일을 제공하는 미들웨어를 반환합니다.
- path.join(__dirname, "public"): path 모듈은 Node.js의 내장 모듈로서 파일 경로 작업에 사용됩니다. __dirname 변수는 현재 디렉토리 이름(현재 실행 중인 스크립트의 절대 경로)을 나타냅니다. path.join을 사용하여 현재 디렉토리와 "public" 폴더 이름을 결합하여 "public" 폴더의 절대 경로를 생성합니다.
모두 종합하면, 이 코드 줄은 Express 애플리케이션에 정적 파일 서비스용 미들웨어를 추가합니다. 해당 미들웨어는 스크립트 파일과 동일한 디렉토리에 위치한 "public" 폴더에서 정적 파일을 제공합니다.
절대경로란 무엇인가? 상대경로와의 차이점은?
"절대 경로"는 파일 시스템에서 특정 파일 또는 디렉토리의 위치를 가리키는 완전한 경로를 말합니다. 이는 컴퓨터의 루트 디렉토리부터 시작하여 해당 파일이나 디렉토리까지의 전체 경로를 포함합니다.
예를 들어, 윈도우 시스템에서 "C:\Users\Username\Documents\file.txt" 또는 Unix/Linux 기반 시스템에서 "/home/username/documents/file.txt"와 같은 형식으로 표현됩니다.
반면에 상대 경로(relative path)는 현재 작업 디렉토리(또는 다른 참조 지점)에 대한 상대적인 위치를 나타냅니다. 예를 들어, 'documents/file.txt'라고 하면 'documents' 폴더 내의 'file.txt' 파일을 참조하며, 이 폴더가 현재 작업 중인 디렉토리 내에 있다고 가정합니다.
따라서 절대 경로와 상대 경로 사이의 주요 차이점은 출발점이 다르다는 것입니다. 절대 경로는 항상 루트 디렉터리에서 시작하고, 상대 경로는 현재 작업 중인 디렉터리(또는 지정된 기준점)에서 시작합니다
검색하기전까지는 몰랐는데 가장 큰차이점은 출발점의 차이. static은 정적 파일을 사용 가능하게하며 path.join(__dirname)에서 __dirname은 절대경로로 현재 스크립트가 있는 경로를 최최경로 부터 찾아오는것 상대 경로로 써도 괜찮지않나.? 궁금하다.
app.use(express.static(path.join(__dirname, "public"))); 코드에서 __dirname을 사용하는 이유는 서버가 실행되는 위치에 상관없이 항상 동일한 디렉토리에서 정적 파일을 제공하도록 보장하기 위함입니다.
만약 상대 경로를 사용한다면, 서버를 시작하는 위치에 따라 경로가 변경될 수 있습니다. 예를 들어, 만약 당신이 프로젝트의 루트 디렉토리에서 서버를 시작한다면 상대 경로는 문제가 되지 않을 수 있습니다. 하지만 만약 다른 디렉토리(예: 하위 디렉토리)에서 서버를 시작한다면, 상대 경로는 올바르게 "public" 폴더를 찾지 못할 것입니다.
따라서 __dirname과 같은 절대 경로를 사용하면 어디서 서버가 시작되든 간에 항상 동일한 위치에서 정적 파일을 제공할 수 있으므로 이러한 문제를 피할 수 있습니다. 이것이 절대경로인 __dirname을 사용하는 주요 이유 중 하나입니다.
mvc 모델

router.get('/', async(req,res)=>{
try {
const data= await ViewPostAll(req,res);
res.render('main',{data});
}
catch(err){
console.log("게시글 리스트 화면 그리다 에러남");
console.log(err);
}
})
화면에서 router.get을 통해서 요청하게되면
비동기적으로 await함수가 나올때까지 기다리게된다. await 뒤에나오는 함수로
controller 에서 ViewPostAlll 함수를 호출한다 (이때 이함수는 require을 통해 모듈로 다른 파일에서 받아왔다.)
const data = ~~
return data로 다시 model에서 소문자 v로 시작하는 viewPostall()함수를 사용해서 데이터를 데이터베이스에서 불러온다.
처리가 끝나면 viewpostall →Viewpostall → routerget메서드 ( res.render('main',{data}); ) 순으로 빠져나오면서 최종적으로 화면에 그려주게된다.
참고
https://expressjs.com/ko/guide/writing-middleware.html
'backend > nodejs' 카테고리의 다른 글
| 20230516 엑세스 해싱 (0) | 2023.09.07 |
|---|---|
| 20230504 nodejs express ejs mysql2 path (0) | 2023.09.07 |
| 20230501 (0) | 2023.07.26 |
| 20230428 # TCP와 UDP ,서버 (0) | 2023.07.25 |
| 20230427 nodejs시작 (0) | 2023.07.25 |