programing

typescript node.js express 경로분리된 파일 모범 사례

abcjava 2023. 6. 20. 21:18
반응형

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

반응형