[Express] 라우터 - 파일로 분리

기초/Node.js|2021. 7. 17. 20:22

소프트웨어가 커짐에 따라 그 복잡도를 잘 정리정돈/관리하지 않으면 소프트웨어의 확장에 한계가 있다.

https://expressjs.com/ko/guide/routing.html

넘 어렵다...

const express = require("express");
const app = express();
const port = 3000;
var fs = require("fs");
var template = require("./lib/template.js");
var path = require("path");
var sanitizeHtml = require("sanitize-html");
var qs = require("querystring");
var bodyParser = require("body-parser");
var compression = require("compression");
var topicRouter = require("./routes/topic");

app.use(express.static("public"));
app.use(bodyParser.urlencoded({ extended: false }));
app.use(compression());
app.use(function (request, response, next) {
  fs.readdir("./data", function (error, filelist) {
    request.list = filelist;
    next(); // next라는 변수에는 그 다음에 호출되어야 할 미들웨어가 담겨 있다.
  });
});

app.use("/topic", topicRouter);

app.get("/", function (request, response) {
  var title = "Welcome";
  var description = "Hello, Node.js";
  var list = template.list(request.list);
  var html = template.HTML(
    title,
    list,
    `<h2>${title}</h2>${description}
    <img src="/images/doodoo.jpeg" style="width:100px; display:block; margin-top:10px"
    `,
    `<a href="/topic/create">create</a>`
  );
  response.send(html);
});

app.use(function (req, res, next) {
  res.status(404).send("사이트를 찾을 수 없습니닷!");
});

이렇게 길었던 코드를!

 

아래의 두 코드로 각각 분리할 수 있다.

//main.js
const express = require("express");
const app = express();
const port = 3000;
var fs = require("fs");
var bodyParser = require("body-parser");
var compression = require("compression");
var indexRouter = require("./routes/index")
var topicRouter = require("./routes/topic");

/*app.get("/", (req, res) => {
  res.send("/");
});*/
app.use(express.static("public"));
app.use(bodyParser.urlencoded({ extended: false }));
app.use(compression());
app.use(function (request, response, next) {
  fs.readdir("./data", function (error, filelist) {
    request.list = filelist;
    next(); // next라는 변수에는 그 다음에 호출되어야 할 미들웨어가 담겨 있다.
  });
});

//topic으로 시작하는 주소들에게 topicRouter라는 미들웨어를 적용하겠다는 뜻.
app.use("/", indexRouter);
app.use("/topic", topicRouter);
//router를 이렇게 지정하면 라우터 내부에서는 path중 topic을 topic.js에 담을 필요가 없다.
//index.js
const express = require("express");
const router = express.Router();
var template = require("../lib/template.js");

router.get("/", function (request, response) {
  var title = "Welcome";
  var description = "Hello, Node.js";
  var list = template.list(request.list);
  var html = template.HTML(
    title,
    list,
    `<h2>${title}</h2>${description}
    <img src="/images/doodoo.jpeg" style="width:100px; display:block; margin-top:10px"
    `,
    `<a href="/topic/create">create</a>`
  );
  response.send(html);
});

module.exports = router;

 

 

'기초 > Node.js' 카테고리의 다른 글

[Express] 보안과 express generator  (0) 2021.07.17
[Express] 에러 처리하기  (0) 2021.07.17
[Express] 미들웨어의 실행순서  (0) 2021.07.16

댓글()