Middleware가 곧 Controller고, Controller는 곧 Middleware이다. 두 함수 모두 인자로 req, res, next
를 가지고 있으나, Controller는 next()를 실행하지 않고(종료하기 때문에) Middleware는 next()를 실행하여 다음 Middelware 혹은 Controller로 넘어간다.
import express from "express";
const PORT = 5006;
const app = express();
const handleHome = (req, res) => {
return res.send("<h1>Welcome to Home</h1>");
};
const logger = (req, res, next) => {
console.log(`Method: ${req.method} / URL: ${req.url}`);
next();
};
const handleLogin = (req, res, next) => {
//process 종료
return res.send('Please enter username & password');
}
const privateMiddleware = (req, res, next) => {
const url = req.url;
console.log(typeof url);
if (url === "/protected") {
return res.send("<h1>Not Allowed</h1>");
}
console.log("Allowed");
//다음 middleware 혹은 controller로 넘어간다
next();
};
const handleProtected = (req, res, next) => {
return res.send("</h1>Welcome to private lounge!</hq>");
}
app.use("/", logger); // '/'로 들어오는 모든 요청에 대해 logger를 실행
app.use('/login', logger);// '/login'로 들어오는 모든 요청에 대해 logger를 실행
app.get("/", handleHome);
app.get("/login", handleLogin);
app.get("/protected", logger, privateMiddleware, handleProtected);
app.listen(PORT, () => {
console.log(`Server is listening on port ${PORT}`);
});
app.use('/url', middleware)
=> /url 으로 들어오는 모든 요청에 대해 middleware()를 실행한다.
sudo lsof -PiTCP -sTCP:LISTEN // LISTEN 중인 포트 리스트
sudo lsof -i :3000 // 특정 포트 확인
sudo kill -9 PID // 특정 포트 종료