Какой нулевой аргумент для cb в multer? - PullRequest
0 голосов
/ 01 мая 2019

В приведенном ниже коде из multer API две функции cb принимают значение null в качестве первого аргумента.Каково значение нуля и какие другие значения могут быть использованы здесь, кроме нуля?

var storage = multer.diskStorage({
  destination: function (req, file, cb) {
    cb(null, '/tmp/my-uploads')
  },
  filename: function (req, file, cb) {
    cb(null, file.fieldname + '-' + Date.now())
  }
})

var upload = multer({ storage: storage }

Ответы [ 3 ]

1 голос
/ 01 мая 2019

Это шаблон обратного вызова с ошибкой, созданный в первые годы существования ядра и библиотек Node.JS в его экосистеме. Это все еще распространенная модель, но в основном она определяется такими вещами, как обещания или асинхронность / ожидание. Вот соответствующий раздел из документов Node.JS https://nodejs.org/api/errors.html#errors_error_first_callbacks.

Другой параметр, отличный от null, будет экземпляром некоторого типа Error.

1 голос
/ 01 мая 2019

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

Соглашение об асинхронном обратном вызове node.js предназначено для обратного вызова, который принимает два параметра, которыевыглядит так, если это была объявленная функция:

function someCallbackFunction(err, value) {
    if (err) {
        // process err here
    } else {
        // no error, process value here
    }
}

Первый параметр - это ошибка (null, если нет ошибки, обычно это экземпляр объекта Error, если есть ошибка).Второе значение - это значение (если ошибки не было).

Итак, вы передаете null в качестве первого аргумента, когда ошибки нет, а второй аргумент будет содержать ваше значение.

К вашему сведению, есть документация для node.js для этого стиля обратного вызова.

1 голос
/ 01 мая 2019

Функции, которые принимают обратный вызов, часто форматируют обратный вызов так, что первый аргумент, предоставленный для обратного вызова, является ошибкой, если обнаружена какая-либо ошибка, а вторым аргументом является успешное извлеченное значение (если ошибка не обнаружена).Это именно то, что здесь происходит.Если destination или filename связаны с чем-то, что может вызвать ошибку, то первый аргумент, который вы передаете cb, может быть ошибкой, например:

destination: function (req, file, cb) {
  if (!authorized) {
    cb(new Error('You are not authorized to do this!'));
    return;
  }
  cb(null, '/tmp/my-uploads')
}

Причина в том, что если первыйАргумент - это ошибка, модуль, передающий cb, поощряется к использованию и проверке первого аргумента, что позволяет правильно обрабатывать ошибки.

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

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