Express
2021-11-07
노드에서 가장 많이 사용되는 express
app.js
const express = require("express");
const app = express();
app.get("/", (req, res) => {
res.send("hello express");
});
app.listen(8080, () => {
console.log("express console start");
});
- 노드에서는 index를 주로 사용하지만 express 에서는 app을 주로 사용한다.
get과 set
app.set("port", 3000); // 전역 변수 설정과 유사
app.listen(app.get("port"), () => {
console.log("express console start");
});
nodemon
- 기존에는 서버를 실행한 뒤 코드가 바뀌면 서버를 종료하고 다시 실행시켜줘야 했지만, nodemon을 통해 자동으로 코드가 바뀌면 서버를 재시작하게 할 수 있다.
process.env.port
app.set("port", process.env.port || 3000); // 전역 변수 설정과 유사
app.listen(app.get("port"), () => {
console.log("express console start");
});
- 3000 말고 다른 포트를 사용하고 싶을 때 사용
- 따로 set이 설정되지 않으면 3000포트에서 실행된다.
전체 코드
const express = require("express");
const path = require("path");
const app = express();
app.set("port", process.env.PORT || 3000);
app.get("/", (req, res) => {
res.sendFile(path.join(__dirname, index.html));
});
app.post("/", (req, res) => {
res.send("hello");
});
app.get("/about", (req, res) => {
res.send("hello express");
});
app.listen(app.get("port"), () => {
console.log("express console start");
});
미들웨어
공통으로 실행되어야 하는 코드를 실행시킬 수 있다.
app.use((req, res) => {
console.log("모두 실행");
});
app.use((req, res) => {
console.log("모두 실행");
next();
});
- next가 있으면 주소와 일치하는 것을 찾아 실행시킨다.
- 이때 미들웨어는 아래 부분이다.
(req, res) => {
console.log("모두 실행");
next();
};
미들웨어를 여러개 사용도 가능하다.
app.use(
(req, res) => {
console.log("모두 실행");
next();
},
(req, res) => {
console.log("모두 실행2");
next();
},
(req, res) => {
console.log("모두 실행3");
next();
}
);
- 이렇게 여러개를 겹쳐 사용할 수 있다.
- next가 존재하기 때문에 그 다음 함수를 실행
에러 미들웨어도 존재한다.
app.use((err, req, res, next) => {});
- 에러 미들웨어는 꼭 네 개의 매개변수를 사용해야 한다.
- next(error)일 경우 바로 에러 처리 미들웨어로 넘어간다
404 에러는 에러 미들웨어 위에 작성한다.
app.use((req, res, next) => {});
- 이 위의 모든 주소를 찾아보았는데 없으면 404 에러
wildcard
app.get("/category/javascript", (req, res) => {
res.send("hello express");
});
app.get("/category/:name", (req, res) => {
res.send("hello express2");
});
- 만약 주소가 /category/javascript 일 경우에는 hello express를 출력하고, javascript가 아닐 경우, 두 번째를 실행시킨다.
app.get("*", (req, res) => {
res.send("hello express2");
});
- 모든 get 요청에 대하여 코드를 실행한다.
요청 한 번에 응답 한 번이 존재해야 하는데, 응답이 너무 많으면 에러가 난다.