초기화 함수 init(8)

김대웅·2021년 7월 21일
0

express 분석

목록 보기
12/14

코드 분석

express/lib/aplication

pp.defaultConfiguration = function defaultConfiguration() {
  var env = process.env.NODE_ENV || "development";

  // default settings
  this.enable("x-powered-by");
  this.set("etag", "weak");
  this.set("env", env);
  this.set("query parser", "extended");
  this.set("subdomain offset", 2);
  this.set("trust proxy", false);

  // trust proxy inherit back-compat
  Object.defineProperty(this.settings, trustProxyDefaultSymbol, {
    configurable: true,
    value: true,
  });

  debug("booting in %s mode", env);

  this.on("mount", function onmount(parent) {
    // inherit trust proxy
    if (
      this.settings[trustProxyDefaultSymbol] === true &&
      typeof parent.settings["trust proxy fn"] === "function"
    ) {
      delete this.settings["trust proxy"];
      delete this.settings["trust proxy fn"];
    }

    // inherit protos
    setPrototypeOf(this.request, parent.request);
    setPrototypeOf(this.response, parent.response);
    setPrototypeOf(this.engines, parent.engines);
    setPrototypeOf(this.settings, parent.settings);
  });

  // setup locals
  this.locals = Object.create(null);
  /**
   * hasOwnProperty등의 기본 메서드조차 없는 개체를 생성한다.
   */

  // top-most app is mounted at /
  this.mountpath = "/";

  // default locals
  this.locals.settings = this.settings;

  // default configuration
  this.set("view", View);
  this.set("views", resolve("views"));
  /**
   * resolve
   * epxress가 작동되는 지점의 절대경로를 가져와서 인자로 받아온 값과 합친다.
   * 
   * 예
   * express가 작동되는 지점의 절대 경로 -> /Users/user/Documents/src
   * this.set("views")를 통해 받아올수 있는 경로 /Users/user/Documents/src/views
   * 해당 경로에 views디렉토리 유무와는 상관없이 설정된다.
   */
  this.set("jsonp callback name", "callback");

  if (env === "production") {
    this.enable("view cache");
    /**
     * env === "production"인경우 
     * settings에 view cache : true가 설정된다.
     */
  }

  Object.defineProperty(this, "router", {
    get: function () {
      throw new Error(
        "'app.router' is deprecated!\nPlease see the 3.x to 4.x migration guide for details on how to update your app."
      );
    },
  });
  /**
   * deprecated된 프로퍼티를 불러오려는 경우 에러를 발생시킨다.
   * 
   * 변경 전 사용 방식
   * app.use(app.router);
   * app.get("/", ...);
   * 
   * 변경 후 사용 방식
   * app.get("/", ...);
   */
};

정리

  • app개체에 cache, engins, settings, locals, mountpath 프로퍼티를 추가하고 값을 설정한다.
  • cache, engins 프로퍼티의 경우 빈 개체({})이고, 값이 존재하지 않는다.
  • settings의 경우 etag, query parser, trust proxy의 설정값과 그에 해당하는 함수 그리고 x-powered-by, env, subdomain offset, trustProxyDefaultSymbol, view, views 등의 프로퍼티가 설정되어 있다.
  • locals의 경우 Object.create(null)을 통하여 만들어진 개체이며, 프로퍼티로 settings를 가지고 있다.
  • app의 경우 "mount"이벤트가 등록되어 있으며 app.use에서 사용한다.
  • mount이벤트 발생시 trust proxy설정이 기본값인 경우 부모 개체의 trust proxy설정을 받아온다.
  • 그 이외의 경우 자식의 값을들을 우선적으로 사용할수 있도록(자식의 값이 존재하지 않는경우에 사용할 수 있도록)설정한다.
profile
42seoul cadet

0개의 댓글