После изменения функции express.js res.send он не будет выдавать никаких данных - PullRequest
0 голосов
/ 04 октября 2019

По сути, я пытаюсь объединить все ответы моего приложения, чтобы они выглядели так:

{
  success: true,
  error: "Error description",
  errorCode: "SomeError",
  data: {
    ...
  }
}

Копирование и вставка этой структуры везде, а также функции-обертки для меня выглядит довольно уродливо,поэтому я попытался изменить функцию send, чтобы она принимала 4 параметра вместо 1, а затем создает заданную структуру.

Я нашел различные примеры того, как изменить функцию send, и нашелс этим промежуточным программным обеспечением

app.use(function (req, res, next) {
  const oldSend = res.send;

  res.send = function (data = {}, success = true, error = '', errorCode = '') {
    let response = {
      data,
      success,
      error,
      errorCode
    };

    oldSend.apply(res, response);
  };

  next();
});

поэтому вызов res.send выглядит следующим образом

res.json(req.session.key != null, true, null, null);

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

1 Ответ

1 голос
/ 04 октября 2019

Вы используете function.apply, который ожидает this, а затем массив аргументов функции (см. MDN для function.prototype.apply ). Вместо этого вам нужно использовать function.call (снова см. MDN для function.prototype.call ).

Тем не менее, предостережение о необходимости перезаписи низкоуровневой частиэкспресс (или любая библиотека) - вы не знаете, что еще может вызывать это, поэтому вы можете получить неожиданные результаты. Вы можете проверить (например), что предоставленный параметр относится к ожидаемому вами типу (например, объект) и передать что-либо неожиданное (например, Buffer) прямо в исходную отправку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...