Express. js Ошибка перенаправления маршрутизации: невозможно установить заголовки после их отправки. - PullRequest
0 голосов
/ 14 января 2020

Я не уверен, почему я получаю эту ошибку: «Ошибка: невозможно установить заголовки после их отправки». Это простой API, построенный на express. js, который проверяет, вошел ли пользователь в систему или нет, и если пользователь не вошел в систему, он просто перенесет пользователя на страницу входа.

Если вы посмотрите на приведенный ниже код, начинающийся с fetch(authApiUrl, config), если пользователь вошел в систему, он получил бы статус 200. Если бы пользователь не вошел в систему, он дал бы статус 401, и он go перешел бы в " еще "заявление и инициировать redirectToAccountSignin(request, response, wwwS);.

Тогда go перейдет в функцию redirectToAccountSignin. До сих пор, когда я запускаю этот код, он выполняет функцию go в redirectToAccountSignin, но я полагаю, что он выдает ошибку на response.redirect(wwwS + '/account/signin?method=initialize&TARGET=' + encodedTargetUrl);.

Есть ли проблема с моим методом "перенаправления"? Что я делаю неправильно? Может кто-нибудь помочь мне с этим?

Заранее спасибо.

const fetch = require("node-fetch");
const splunkLogFormat = require('./logUtilities');

function authenticate(request, response, next, successCallback, configuration) {
  // get environment for URL call and grab from environment json
  const appName = !!configuration.appName ? configuration.appName : 'micro-server-app';
  const runtimeEnvironment = !!configuration.environment ? configuration.environment : 'dev';

  const logPreamble = splunkLogFormat(appName, 'authenticate');
  const wwwS = !!environments && !!environments[runtimeEnvironment] && environments[runtimeEnvironment].www_s;

  const authApiUrl = wwwS + '/api/auth/login/check';
  const headers = {
    'Accept': 'application/json',
    'Content-Type': 'application/json',
    cookie: request.headers.cookie
  };
  const method = 'GET';
  const config = { headers, method };
  fetch(authApiUrl, config)
    .then(authResponse => {
      const status = authResponse.status;
      if (status === 200) {
        successCallback(request, response, next);
      } else {
        redirectToAccountSignin(request, response, wwwS);
      }
    })
    .catch(error => {
      redirectToAccountSignin(request, response, wwwS);
    });
};

function redirectToAccountSignin(request, response, wwwS) {
  const hostname = !!request && request.hostname;
  const protocol = 'https://';
  const url = !!request && request.originalUrl;
  const encodedTargetUrl = encodeURIComponent(protocol + hostname + url);

  response.redirect(wwwS + '/account/signin?method=initialize&TARGET=' + encodedTargetUrl);
  response.end();
};

module.exports = authenticate;

1 Ответ

0 голосов
/ 14 января 2020

Вы уверены, что хотите использовать res.end() после res.redirect()? { ссылка } Что ты писал до этого?

...