노마드/유튜브
ch3. express intro
hippo0207
2022. 8. 9. 22:17
0. First Server 만들기
- server란?
- 항상 켜있는 , 인터넷에 연결된 컴퓨터
- express() 로 애플리케이션 생성
- app이 무엇을 listening해야하는 건가?
- request >> 서버가 listening 하고있음
- express().listen(port번호, callback함수)
- callback함수 : 서버가 시작할때 작동하는 함수
- 어떤 포트를 리스닝할지 알려줘야함
import express from "express";
const app = express(); // << express 어플생성
const PORT = 4000;
const handleListening = () =>
console.log(`🎈Server Listening on port http://localhost:${PORT}`);
app.listen(PORT, handleListening);
- 2. 서버에 가는 방법
- 보통은 localhost로 접속가능
- 서버종료 : ctrl + c
3.1~3.2 GET requests
- Cannot GET /
- / = root page
- GET : HTTP(서버끼리 소통하는 방법) method
- get = bring me the page
- express() 로 어플 만든 후에 작업해야함 (맨위엔 이거)
- 샌드위치처럼. 맨밑엔 app.listen(PORT, handleListening);
const app = express(); // << express 어플생성
-----------
const handleHome = () => console.log("Somebody is trying to go home");
// 누가 root page로 get request를 보낸다면, 함수를 작동시킴
app.get("/", handleHome);
---------------
const handleListening = () =>~~~
3.3 Responses
- get request작동시 > 작동시키는 함수로 express가 req, res를 args로 보내줌
- res.end() >> request 강제종료시키기
- res.send()
const handleHome = (req, res) => {
//console.log(req);
//return res.end(); // request를 종료시킨거임
return res.send("i love you");
};
const handleLogin = (req, res) => {
return res.send("login here");
};
// 누가 root page로 get request를 보낸다면, 함수를 작동시킴
app.get("/", handleHome);
app.get("/login", handleLogin);
3.5 middlewares = handler = controller
- 중간에 있는 소프트웨어
- 브라우저가 뭔가 request하면 서버가 응답()함 >> 그사이에 있음
- 모든 middleware = handler , handler = middleware
- handler == controller
- controller엔 3개 args가 있다 (request, response, next)
- next() >> 다음 함수를 호출함
- request에 응답하지 않음. request를 지속시켜주는 것. 응답하는 함수가 아니라 다음함수로 넘기는 함수임
const gossipMiddleware = (req, res, next) => {
console.log(" i'm in the middle!");
next();
};
const handleHome = (req, res) => {
return res.send("i love you");
};
app.get("/", gossipMiddleware, handleHome);
app.use() >> global middleware 사용하게 함
- 모든 route에서 이걸 사용함
- app.use() 다음에 app.get()이 있어야 get전에 사용됨 (top to bottom)
- global middleware에서 return하면 다음꺼연결안되고 끝남. next()해야 다음함수 실행됨
~~~
const logger = (req, res, next) => {
console.log(`i'm in the middle! ${req.method} ${req.url}`);
next(); << <<
};
const privateMiddleware = (req, res, next) => {
const url = req.url;
if (url === "/protected") {
return res.send("<h1>Not Allowed</h1>"); << <<
}
console.log("Allowed, you may continue");
next(); << <<
};
const handleHome = (req, res, next) => {
return res.send("i love you");
};
const handleProtected = (req, res) => {
return res.send("Welcome to the private rounge");
};
app.use(logger); << << << <<
app.use(privateMiddleware); << <<
app.get("/", handleHome); << <<
app.get("/protected", handleProtected); <<
~~~
3.11 External Middlewares
- Morgan : 미들웨어중 하나
- npm i morgan
- 함수호출시 설정한대로 미들웨어를 리턴해줌
- 다섯가지 옵션
- morgan이 기존 middleware보다 좀 더 정교함
- get, path, status code 정보를 모두 가지고 있음
morgan
HTTP request logger middleware for node.js. Latest version: 1.10.0, last published: 2 years ago. Start using morgan in your project by running `npm i morgan`. There are 7937 other projects in the npm registry using morgan.
www.npmjs.com
import morgan from "morgan";
const logger = morgan("dev");
app.use(logger);
// GET / 200 3.833 ms - 5
- dev 말고 다른거하면 다른거보여줌