what is node.js → 브라우저 밖에서 돌아가는 js
npm i @babel/core @babel/node @babel/preset-env nodemon —save-dev
teminal에 touch babel.config.json
파일안에 {"presets": ["@babel/preset-env"]} 적기
"script": {"dev": "nodemon —exec babel-node index.js"}
사용자가 http프로토콜을 사용하여 요청하는 것을 Get 요청이라고 한다.
주소 표시줄에 URL을 입력하고 페이지가 로드되면 실제로 서버에 GET 요청을 보내고 응답을 받고 브라우저에 응답을 표시한다.
express 서버 만들기
import express from "express";
const app = express();
const PORT = 4000;
app.get("/", (req, res) ⇒ {
return res.send("Hello World);
});
app.listen(PORT, () ⇒
console.log(`✅ Server listening on port http://localhost:${PORT} 🔥`);)
app.METHOD(PATH, Handler)
app.use(middleware 함수)
모든 router의 미들웨어가 된다.
const logger = (req, res, next) => {
console.log(`${req.method} ${req.url}`);
next();
}
const handleHome = (req, res) => {
return res.send("<h1>i still love you</h1>");
}
app.use(logger);
app.get("/", handleHome);
app.use()는 app.get()보다 앞에 있어야 실행됨
→ express는 js이니깐 위에서부터 코드가 실행됨. 만약 app.use()가 app.get()보다 뒤에 위치하면 app.get()가 먼저 실행되어 return되니 app.get()은 실행이 안됨.
middleware
미들웨어 함수는 요청 오브젝트(req
), 응답 오브젝트 (res
), 그리고 애플리케이션의 요청-응답 주기 중 그 다음의 미들웨어 함수 대한 액세스 권한을 갖는 함수입니다. 그 다음의 미들웨어 함수는 일반적으로 next
라는 이름의 변수로 표시됩니다.
미들웨어 함수는 다음과 같은 태스크를 수행할 수 있습니다.
현재의 미들웨어 함수가 요청-응답 주기를 종료하지 않는 경우에는 next()
를 호출하여 그 다음 미들웨어 함수에 제어를 전달해야 합니다. 그렇지 않으면 해당 요청은 정지된 채로 방치됩니다
const gossipMiddleware = (req, res, next) => {
console.log("I'm in the middle");
next();
}
const handleHome = (req, res) => {
return res.send("<h1>i still love you</h1>");
}
app.get("/", gossipMiddleware, handleHome);
npm middleware
morgan → GET / 304 6.648 ms - -
npm i morgan, import morgan from "morgan", app.use(morgan("dev");
app.use(express.urlencoded({extended: true}));
init.js
Database를 사용할때 Database관련 코드들은 server.js에 저장하면 가독성이 떨어지니 init.js를 만든후 Database 관련 내용 저장하는게 나음.
init.js
import "./db";
import "./models/Video";
import app from "./server";
const PORT = 4000;
const handleListening = () => {
console.log(`✅ Server listening on port http://localhost:${PORT} 🔥`);
}
app.listen(PORT, handleListening);
import express from "express";
import morgan from "morgan";
import globalRouter from "./routers/globalRouter";
import videoRouter from "./routers/videoRouter";
import userRouter from "./routers/userRouter";
const app = express();
const logger = morgan('dev');
app.set("views", `${process.cwd()}/src/views`);
app.set("view engine", "pug");
app.use(logger);
app.use(express.urlencoded({extended: true}));
app.use("/", globalRouter);
app.use("/videos", videoRouter);
app.use("/users", userRouter);
export default app;
const localMiddleware = (req, res, next) => {
res.locals.변수이름 = 값;
}
app.use(localMiddleware);
if (변수이름 === 값)
li
a(href="/logout") Log Out