Node.js контекст в Class

Допустим есть класс Foo, который поднимает http сервер:

const http = require("http");

class Foo {
  constructor(bar) {
    this.bar = bar;
  }

  listen(port) {
    http.createServer(this.handler).listen(port);
  }

  handler(req, res) {
    console.log(this.bar);
  }
}


new Foo("test").listen(3000);

В handler'е (обработчике запросов к серверу) должны использоваться поля этого класса, но в данном случае, в handler, контекст this указывает на экземпляр http, а не на Foo и this.bar соответственно вернет undefined.

Можно поправить это двумя способами:

  1. Добавить в конструктор this.handler = this.handler.bind(this);
  2. В методе listen() сделать http.createServer((req, res) => this.handler(req, res)).listen(port);

Но ходят слухи, что bind плохо влияет на производительность, а второй способ - очевидный костыль. Как в мире Node.js принято поступать в подобных случаях?

Мне хотелось бы знать, как правильно управлять контекстом с точки зрения производительности в Node.js. Повлияет ли на производительность bind в конструкторе? Или может быть стоит писать всё функциями а не классами?


Ответы (0 шт):