본문 바로가기

Javascript/Node.js

Node.js 라우터 분할, 파일 라우팅

반응형

라우터 분할

애플리케이션 규모가 커짐에 따라 라우트 수가 많아진다.

나중에는 그 라우트의 수를 다루기 어려워질 수 있는데 분할을 통해서 해결할 수 있다.

1
2
3
4
5
6
7
8
9
10
11
12
13
var express = require("express");
var path = require("path");
var apiRouter = require("./routes/api_router");
 
var app = express();
 
var staticPath = path.resolve(__dirname,"static");
app.use(express.static(staticPath));
 
app.use("/api",apiRouter);
 
app.listen(3000);
 


[app.js 메인 앱]

/routes 디렉토리 안에 api_router.js 파일을 둬서 /api 로 시작되는 것들은 거기서 처리할 수 있게 분할했다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
var express = require("express");
 
var ALLOWED_IPS = [
  "::1",//127.0.0.1
  "123.123.123.123"
];
 
var api = express();
 
api.use(function(req,res,next){
  var userIsAllowed = ALLOWED_IPS.indexOf(req.ip) !== -1;
  // 탐색해서 없으면 -1 있으면 그 인덱스 반환
  //
  if(!userIsAllowed){
    console.log(req.ip);
    res.status(401).send("Not authorized");
  }else {
    next();
  }
});
 
api.get("/users",function(req,res){
  /*....*/
  res.send("good!");
  console.log("good!");
});
module.exports = api;
 



[routes/api_router.js]

여기서는 허가된 ip에서만 무언가 가능하게 하는 샘플 애플리케이션이다.

그 무언가는 생략하고 간단히 코드 살펴보면,

허가된 ip배열을 만들어놓고 요청이온 ip가 그 배열에 있으면 통과시켜주면서 다음 라우트로 가게했다.

예를들어 "localhost:3000/api/users" 라고 요청이 오면 화면과 콘솔에 good! 을 출력한다.

(ip가 내 스스로 요청하면 ::1로 나옴)

module.exports = api; 꼭 쓰기.


다중 디렉토리에서 정적 파일 제공하기

1
2
3
4
5
var publicPath = path.resolve(__dirname,"public");
var userUploadsPath = path.resolve(__dirname, "user_uploads");
 
app.use(express.static(publicPath));
app.use(express.static(userUploadsPath));


- 시나리오

1. public폴더 user_uploads폴더에 없는 파일 요청

2. public폴더에 있는 파일 요청

3. public폴더가 아닌 user_uploads폴더에 있는 파일 요청

4. public폴더와 user_uploads폴더 모두에 있는 파일 요청

1
2
3
4
5
var publicPath = path.resolve(__dirname,"public");
var userUploadsPath = path.resolve(__dirname, "user_uploads");
 
app.use("public", express.static(publicPath));
app.use("uploads", express.static(userUploadsPath));


시나리오에 맞게 교정. 이제 4번같은 충돌없이 어느 디렉토리에 어떤 파일이든 얻을 수 있게 되었다.

반응형

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

Pug 문법 정리 요약 (템플릿 엔진)  (17) 2017.09.29
Node.js API 구축 방법 기초  (8) 2017.09.28
라우팅 (Routing)  (0) 2017.09.27
Node.js 미들웨어(Middleware)  (0) 2017.09.26
방명록 웹 애플리케이션 만들기  (0) 2017.09.25