방명록
- [개발자의품격][부트캠프][1기][31차시] Node.js #5 | route(정규 표현식, Module, Alias) | nodemon2022년 04월 08일 17시 22분 27초에 업로드 된 글입니다.작성자: DandyNow728x90반응형
| route
정규 표현식 사용
정규 표현식을 이용할 수 있다. 경로 우선순위는 위에서 아래이다. 실무에서는 이 우선순위를 이용해 설계하기도 한다.
// 12_route.js const express = require("express"); const app = express(); app.listen(3000, () => { console.log("서버가 포트 3000번으로 시작되었습니다."); }); // ? 0개 혹은 1개, /abcd, /acd app.get("/ab?cd", (req, res) => { res.send("ab?cd"); }); // b가 1개 이상 app.get("/ab+cd", (req, res) => { res.send("ab+cd"); }); // b와 C 사이에 아무 것도 없거나 하나 이상의 문자 app.get("/ab*cd", (req, res) => { res.send("ab*cd"); }); // a가 포함된 모든 경우 app.get(/a/, (req, res) => { res.send("/a/"); }); // insert 문자로 시작 app.get(/^insert/, (req, res) => { res.send("/a/"); });
Module
실무에서는 route를 모듈화 하여 사용한다.
// routes/product.js const express = require("express"); const router = express.Router(); const mysql = require("../mysql"); router.get("/category", async (req, res) => { const categoryList = await mysql.query("categoryList"); res.send(categoryList); }); router.get("/category/:product_category_id", async (req, res) => { const { product_category_id } = req.params; const categoryList = await mysql.query("categoryDetail", product_category_id); res.send(categoryList); }); router.post("/category", async (req, res) => { const result = await mysql.query("categoryInsert", req.body.param); res.send(result); }); router.put("/category/:product_category_id", async (req, res) => { const { product_category_id } = req.params; const result = await mysql.query("categoryUpdate", [ req.body.param, product_category_id, ]); res.send(result); }); module.exports = router; // 모듈로 사용될 것이므로
// 13_route_module.js const express = require("express"); require("dotenv").config({ path: `mysql/.env.test` }); // 환경변수 정보를 모듈 보다 먼저 넣어 줘야 한다. const productRoute = require("./routes/product"); const app = express(); app.use( express.json({ limit: "50mb", // 최대 50메가 }) ); // 클라이언트 요청 body를 json으로 파싱 처리 app.listen(3000, () => { console.log("서버가 포트 3000번으로 시작되었습니다."); }); app.use("/api/product", productRoute); // routes/product.js 모듈의 경로에 붙어 /api/product/category로 만든다.
Alias
규모가 작은 프로젝트의 경우 alias 파라미터를 받도록 하면 하나의 get 함수로 모든 get 라우터 처리가 가능하다.
// 14_route_alias.js const express = require("express"); const app = express(); console.log(app.get("env")); require("dotenv").config({ path: `mysql/.env.test` }); // 반드시 "const mysql = require("./mysql");" 코드 위에 작성해야 한다. // console.log(process.env); const mysql = require("./mysql"); app.use( express.json({ limit: "50mb", // 최대 50메가 }) ); // 클라이언트 요청 body를 json으로 파싱 처리 app.listen(3000, () => { console.log("서버가 포트 3000번으로 시작되었습니다."); }); // alias 파라미터를 받도록 함 app.get("/api/:alias", async (req, res) => { const categoryList = await mysql.query(req.params.alias); res.send(categoryList); });
실무에서는 get, post, put, delete를 post로 처리하기도 한다. 아래와 같이 코드를 작성하고 sql.js에 필요한 쿼리를 추가하여 사용하는 방법이다. 하지만 유지보수와 가독성 등을 고려하여 서버단에서 API 코드를 작성하는 것이 좋을 수 있다.
// 14_route_alias.js ... app.post("/api/:alias", async (req, res) => { const categoryList = await mysql.query(req.params.alias, req.bogy.param); res.send(categoryList); });
| nodemon
개발할 때 코드의 변경 발생 시 node의 재실행 없이 변경이 적용되도록 한다. 개발 시 유용하며 운영 시에는 사용할 수 없다.
npm install -g nodemon
// mysql/sql.js module.exports = { ... // categoryDetail 커리를 추가하였다. categoryDetail: `select * from product_category where product_category_id=?`, ... };
728x90반응형'영광의 시대! > 2022 개발자의 품격 부트캠프 1기' 카테고리의 다른 글
다음글이 없습니다.이전글이 없습니다.댓글