выполнить http-запрос и, если статус запрещен, продолжить, узел

#node.js

#node.js

Вопрос:

Здесь я делаю несколько http-запросов по ссылкам, которые я отфильтровал заранее. Ссылки находятся внутри массива в строковом формате.

 for (let link of linkArray) {

    const linkOptions = {
      uri: link,
      resolveWithFullResponse: true,
    };
    linkRequest = await rp(linkOptions);

    //some other actions with linkRequest response
}
  

Но, конечно, the request statuses of the links can be some bad ones (например 404 forbidden errors , коды статуса в основном терки, чем 300).
Здесь я не хочу, чтобы программа была уничтожена, вместо этого я хочу пропустить ответ, который запрещен, и продолжить проверку оставшихся ссылок linkArray .

Что я пробовал до сих пор:
под комментарием я проверил statusCodes , если это какой-то плохой, чем продолжить итерацию цикла.

 if (assetsRequest.statusCode === 204 || assetsRequest.statusCode >= 300) continue
  

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

p.s. Я использую модуль запроса-обещания

Ответ №1:

Программа завершает работу, потому что вы не улавливаете ошибку.

Вы всегда должны перехватывать ошибки, особенно если вы выполняете процесс, подверженный ошибкам, такой как http-запрос.

Здесь я добавил try catch

 for (let link of linkArray) {
    const linkOptions = {
      uri: link,
      resolveWithFullResponse: true,
    };
    try {
      linkRequest = await rp(linkOptions);
    } catch(err) {
      // do something with error or at least log it
      console.log(err);
    }
    //some other actions with linkRequest response
}
  

Поэтому, когда rp () завершается с ошибкой, он переходит прямо к блоку catch, но не завершает цикл, следовательно, процесс продолжается для другой ссылки в массиве.