Я не уверен, почему я получаю эту ошибку: «Ошибка: невозможно установить заголовки после их отправки». Это простой 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;