от
Я боролся с этим в течение 2 дней: / Я использую экспресс-запрос для загрузки внешних файлов на сервер ...
var dest = "downloads/imgs";
var filename = "image";
var url = "http://pngimg.com/uploads/spongebob/spongebob_PNG27.png"

var file = fs.createWriteStream(dest   "/"   filename       path.extname(url));

request.get(url)
.on('error', function(err) {
    console.log(err);
    return;
}).pipe(file);

file.on('error', function(err) {
    file.end();
});
file.on('finish', function() {
    file.close();
});
Это отлично работает. За исключением случаев, когда я вставляю неправильный URL, я получаю неверную ошибку URI, и сервер падает, вместо того, чтобы перехватить ошибку. Любая идея, почему возврат on.error не работает?              

Ваш ответ

Отображаемое имя (по желанию):
Конфиденциальность: Ваш электронный адрес будет использоваться только для отправки уведомлений.
Анти-спам проверка:
Чтобы избежать проверки в будущем, пожалуйста войдите или зарегистрируйтесь.

1 Ответ

0 голосов
от
Я думаю, что происходит, так это то, что код пытается передать, несмотря на состояние ошибки в запросе http. Сделайте файл ввода / вывода только при хорошей загрузке ...
var dest = "downloads/imgs";
var filename = "image";
var url = "http://pngimg.com/uploads/spongebob/spongebob_PNG27.png"

let fn = dest   "/"   filename       path.extname(url);
var file = fs.createWriteStream(fn);

request
  .get(url)
  .on('error', function(err) {
    console.log('caught error '   err);
    return;
  })  // instead of piping here...
  .on('response', function(response) {
    response.pipe(file);
    console.log(`wrote to `   fn);
  })

file.on('error', function(err) {
    file.end();
});

file.on('finish', function() {
    file.close();
});
    
...