하루종일 앉아 있었는데 막상 많은 걸 하지 못한 하루였다.
내일 부터는 자바스크립트 공부, 알고리즘 풀기는 빼먹지 말자!
라우터는 http메소드와 url 경로라고 생각하면 된다.
app.set(’port’, process.env.PORT || 3000)
서버에다 속성을 심는다 생각하면 된다.
app.get(’port’) 이렇게 가져올 수 있다. set으로 익스프레스 쓸 때 전역변수와 같이 쓸 수 있다.
익스프레스는 위에서 아래로 실행되기때문에 범위가 넓은 라우터들은 밑에 놔두는게 좋다.
예를들어 app.get(’*’, 미들웨어) 이나 app.get(’/category/:name’, 미들웨어)이 앞에 있고 next를 해주지 않으면 app.get(’/’, 미들웨어), app.get(’/category/node’, 미들웨어)같은 경우 실행이 안된다.
미들웨어는 (req,res, next) ⇒ {} 함수이다. 이걸 라우터에 장착한다.
에러처리 미들웨어는 반드시 err, req, res, next 4개를 다써줘야한다.
status 설정을 안해주면 기본으로 200으로 설정된다.
보안 이슈 때문에 세세하게 status를 안정해주는 경우도 있다. HTTP status를 500으로 한다면 해커가 어떤 경우 에러가 발생하는지 파악하고 계속 에러를 낼 수도 있다.
요청 한번에 응답 한번 보내줘야하는데
한 라우터 안에서 res.send, res.json등 여러개 써주면 cannot set headers after they are sent to the client라는 에러를 만나게 된다.
자바스크립트에서 함수는 return을 해야 종료된다. res.json, res,send등은 return이 아니다. res는 그냥 응답을 보낼 뿐이지 함수 자체를 종료하는게 아니다.
노드도 자바스크립트다 까먹지 말자.
API서버를 만들면 보통 res.json을 많이 쓰고
웹서버를 만들면 res.sendFile을 많이 쓴다.
res.render도 res.send, res.json처럼 응답을 보내는 것이다.
next('route')예시
app.get(
'/',
(req, res) => {
res.sendFile(path.join(__dirname, 'index.html'));
if (true) {
next('route');
} else {
next();
}
},
(req, res) => {
console.log('실행되나요?');
}
);
app.get('/', (req, res) => {
console.log('실행되지롱');
});
next(’route’)하면 다음 라우터로 넘어간다. if문으로 true일 경우 다음 라우터로 넘어가고 아니면 다음 미들웨어가 실행되도록 짤 수 있다.