Проблема перенаправления цикла Express.js / while-else - PullRequest
0 голосов
/ 29 сентября 2019
app.post('/process', function(request, response){  
  var i = 0;
    while(i < data.length){
        if(data[i].condition1 == condition1 && data[i].condition2 == condition2){
            response.redirect('/first_page');
          }
          i++;
      }
      response.redirect('/second_page');
}

Я попытался сделать, если условие 1 и условие 2 верны, перенаправить на первую страницу.И если это ложно, перенаправить на вторую страницу.Но это продолжает происходить ошибка.Вот журнал.

Ошибка [ERR_HTTP_HEADERS_SENT]: Невозможно установить заголовки после того, как они отправлены клиенту

1 Ответ

1 голос
/ 29 сентября 2019

если вы хотите перенаправить на «first_page», если ЛЮБОЙ элемент в данных массива соответствует условию, или «second_page», если ни один из них не соответствует условию,

Самое простое изменение вашего кода -

app.post('/process', function(request, response) {
  var i = 0;
  while (i < data.length) {
    if (data[i].condition1 == condition1 && data[i].condition2 == condition2) {
      response.redirect('/first_page');
      return; // done, no need to check any more of data
    }
    i++;
  }
  response.redirect('/second_page');
});

Однако использование Array#some с if / else будет работать

app.post('/process', function(request, response) {
  if (data.some(item => item.condition1 == condition1 && item.condition2 == condition2)) {
    response.redirect('/first_page');
  } else {
    response.redirect('/second_page');
  }
});

data.some вернет true, если какой-либо элемент данных соответствует условию, в противном случае вернется false

Лично япредпочитаю код Array.some, так как он более аккуратный и более понятный в отношении того, что происходит

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