반응형
라우터 분할
애플리케이션 규모가 커짐에 따라 라우트 수가 많아진다.
나중에는 그 라우트의 수를 다루기 어려워질 수 있는데 분할을 통해서 해결할 수 있다.
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 |