typescript node.js express 경로분리된 파일 모범 사례
노드 프로젝트에서 Express를 사용하고 Typescript와 함께 Express에 대한 "최적의 작업 방식"을 선택합니다.라우터.
디렉터리 구조 예제
|directory_name
---server.js
|--node_modules
|--routes
---index.ts
|--admin
---admin.ts
|--products
---products.ts
|--authentication
---authentication.ts
그래서 index.ts 내부에서는 모든 하위 항목을 캡슐화하고 관리합니다.
//admin.ts (nested inside of index.ts)
import * as express from "express";
export = (() => {
let router = express.Router();
router.get('/admin', (req, res) => {
res.json({success: true});
});
return router;
})();
//index.ts (master file for express.Router)
import * as express from "express";
//import sub-routers
import * as adminRouter from "./admin/admin";
import * as productRouter from "./products/products";
export = (() => {
let router = express.Router();
// mount express paths, any addition middleware can be added as well.
// ex. router.use('/pathway', middleware_function, sub-router);
router.use('/products', productRouter);
router.use('/admin', adminRouter);
//return for revealing module pattern
return router;
})(); //<--- this is where I don't understand something....
마지막으로 서버를 설정할 것입니다.js
//the usual node setup
//import * as *** http, body-parser, morgan, mongoose, express <-- psudocode
import * as masterRouter from './routes/index'
var app = express();
//set-up all app.use()
app.use('/api', masterRouter);
http.createServer(app).listen(8080, () => {
console.log('listening on port 8080')
};
제 주요 질문은 정말로 index.ts(masterRouter 파일)이고 IIFe의 중첩된 경로입니다.
내보내기 =(함수:{});
그것이 라우터를 위한 유형 스크립트 모듈을 작성하는 올바른/최적의 방법이어야 합니까?
아니면 다른 패턴을 사용하는 것이 더 나을까요, 아마도 그 패턴을 활용하는 것입니다.
내보내기 함수 fnName() {} -- 내보내기 클래스 cName {} -- 내보내기 기본값입니다.
IIFe의 이유는 다른 파일로 가져올 때 모듈을 초기화할 필요가 없고 라우터 유형별로 인스턴스가 하나만 있기 때문입니다.
NodeJS에서 각 파일은 모듈입니다.변수를 선언해도 글로벌 네임스페이스가 오염되지 않습니다.그래서 당신은 오래된 것을 사용할 필요가 없습니다.IIFE
변수를 적절하게 범위를 지정하는 요령(및 지구 오염/충돌 방지).
다음과 같이 적을 수 있습니다.
import * as express from "express";
// import sub-routers
import * as adminRouter from "./admin/admin";
import * as productRouter from "./products/products";
let router = express.Router();
// mount express paths, any addition middleware can be added as well.
// ex. router.use('/pathway', middleware_function, sub-router);
router.use('/products', productRouter);
router.use('/admin', adminRouter);
// Export the router
export = router;
모듈에 대한 추가 정보: https://basarat.gitbooks.io/typescript/content/docs/project/modules.html
언급URL : https://stackoverflow.com/questions/37167602/typescript-node-js-express-routes-separated-files-best-practices
'programing' 카테고리의 다른 글
열거형 값을 반복 (0) | 2023.06.20 |
---|---|
판다 데이터 프레임 및 카운트에서 선택한 열에 있는 값의 고유한 조합 (0) | 2023.06.20 |
django에서 openpyxl workbook 개체를 HttpResponse로 반환합니다.가능합니까? (0) | 2023.06.20 |
static method와 abc.abstract method: 섞일까요? (0) | 2023.06.15 |
iTunesConnect / App StoreConnect에서 앱을 삭제하는 방법 (0) | 2023.06.15 |