app.use는 Node.js의 Express 프레임워크에서 사용되는 메서드입니다.
미들웨어 함수는 요청(request), 응답(response), 그리고 애플리케이션의 요청-응답 사이클 중 다음에 실행될 미들웨어 함수에 대한 참조인 next 함수를 인자로 받습니다.
app.use를 사용하는 주요 목적은 다음과 같습니다:
- 미들웨어 추가: 특정 경로로 들어오는 요청에 대해 실행되는 함수를 정의할 수 있습니다. 예를 들어, app.use(express.json())은 들어오는 요청의 본문이 JSON 형식인 경우 이를 파싱하여 JavaScript 객체로 변환하는 미들웨어입니다.
- 라우팅: 특정 경로에 대한 요청을 처리하는 라우터나 라우팅 모듈을 연결할 수 있습니다. 예를 들어, app.use("/images", imageRouter)는 /images 경로로 들어오는 모든 요청을 imageRouter 모듈에 위임합니다.
- 정적 파일 제공: Express에서 정적 파일(HTML, CSS, JavaScript, 이미지 파일 등)을 제공하기 위해 사용됩니다. 예를 들어, app.use("/uploads", express.static("uploads"))는 uploads 디렉토리에 있는 파일들을 /uploads 경로를 통해 접근할 수 있도록 합니다.
- 에러 핸들링: 애플리케이션에서 발생하는 에러를 처리하는 데 사용될 수 있습니다.
next 함수의 사용은 요청 처리 흐름을 제어하는 데 중요한 역할을 합니다.
첫 번째 예제에서는 각 미들웨어가 순차적으로 실행되고, 두 번째 예제에서는 에러가 발생할 경우 에러 핸들링 미들웨어로 직접 이동합니다.
첫 번째와 두 번째 미들웨어는 next를 호출하여 다음 미들웨어로 이동하고, 마지막 미들웨어는 응답을 보냅니다.
const express = require('express');
const app = express();
// 첫 번째 미들웨어
app.use((req, res, next) => {
console.log('첫 번째 미들웨어');
next(); // 다음 미들웨어로 이동
});
// 두 번째 미들웨어
app.use((req, res, next) => {
console.log('두 번째 미들웨어');
next(); // 다음 미들웨어로 이동
});
// 세 번째 미들웨어
app.use((req, res) => {
console.log('세 번째 미들웨어');
res.send('Hello from the third middleware!');
});
const PORT = 3000;
app.listen(PORT, () => {
console.log(`Server is running on port ${PORT}`);
});
에러 핸들링 예제
next 함수는 에러 처리에도 사용됩니다. 에러 핸들링 미들웨어는 네 개의 인자(에러, 요청, 응답, next)를 받습니다.
const express = require('express');
const app = express();
// 일반 미들웨어
app.use((req, res, next) => {
// 에러를 생성
const error = new Error('Something went wrong!');
next(error); // 에러와 함께 다음 미들웨어(에러 핸들링 미들웨어)로 이동
});
// 에러 핸들링 미들웨어
app.use((error, req, res, next) => {
console.error(error); // 에러 로깅
res.status(500).send('An error occurred!');
});
const PORT = 3000;
app.listen(PORT, () => {
console.log(`Server is running on port ${PORT}`);
});
'node.js' 카테고리의 다른 글
몽고db 기본 연결 (0) | 2023.09.19 |
---|---|
express, react 이미지 업로드 서버 (0) | 2023.09.17 |
node.js next 함수를 이용한 Express 미들웨어 실행