Задать вопрос
@motomac

Не будет ли утечки памяти?

Пишу небольшой gateway для API на Express. Сервер принимает HTTP-запрос, читает токен и делает несколько запросов на основной REST API, снабжая каждый этим токеном.

Чтобы не вызывать каждый метод из модуля api с токеном, использую конструктор и классы ES6. Но возникли сомнения в правильности моего подхода. Не пахнет ли здесь бесконтрольным созданием экземпляров класса Api при множественных запросах от разных клиентов и последующими утечками памяти?

Ну и в целом может есть более элегантный способ организовать код?

// index.js
const Api = require('./api')

app.get('/forward_to_api', function (req, res) {
  let api = new Api(res.locals.token)

  api.getSomething('something')
    .then(response => ...)
    .catch(error => console.log(`Error: ${error.message}`))

  api.getSomethingNew('somethingNew')
    .then(response => ...)
    .catch(error => console.log(`Error: ${error.message}`))
})

// api.js
module.exports = class Api {
  constructor(token) {
    this.config = {
      headers: { 'Authorization': `Bearer ${token}` }
    }
  }

  getSomething(name) {
    return axios.get(`/api/something/${name}`, this.config)
  }

  getSomethingNew(name) {
    return axios.get(`/api/something_new/${name}`, this.config)
  }
}
  • Вопрос задан
  • 87 просмотров
Подписаться 1 Средний Комментировать
Решения вопроса 1
fornit1917
@fornit1917
Во-первых, утечек памяти не будет, обо всём позаболится сборщик мусора.
Но, во-вторых, у вас в целом код очень странный.
Вы получаете один запрос на /forward_to_api, внутри делаете два параллельных запроса. Как только один из них отрабатывает - вы шлёте клиенту ответ и закрываете с ним соединение. Вы понимаете, что когда отработает второй запрос, ему уже некуда будет отправить свой status 204? В чём смысл такого кода?
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@Coder321
Если уж сильно боитесь, то создаейте один екземпляр и в методы передавайте токен.
На крайняк может занулить экземпляр когда метод отработает.
Но как сказал Vit утечек не будет, так как когда метод отработает свое екземпляр апи будет удален зборщиком.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы