2
votes

Quel est l'argument nul de cb dans multer?

Dans le code ci-dessous, à partir de l'API multer, les deux fonctions cb prennent null comme premier argument. Quelle est la signification de null et quelles autres valeurs peuvent être utilisées ici autres que 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 }


1 commentaires

Normalement, lors de l'utilisation de rappels, il est courant de faire du premier argument d'un rappel un état d'erreur. par exemple. callback (new Error ("oups quelque chose s'est mal passé"));


3 Réponses :


4
votes

Les fonctions asynchrones qui prennent un rappel formate souvent le rappel de telle sorte que le premier argument fourni au rappel soit l'erreur, si une erreur est rencontrée, tandis que le deuxième argument est la valeur récupérée avec succès (si aucune erreur n'est rencontrée). C'est exactement ce qui se passe ici. Si destination ou filename impliquait quelque chose qui pourrait générer une erreur, alors le premier argument que vous passez à cb pourrait être l'erreur, par exemple: < pre> XXX

Le raisonnement est que, si le premier argument est l'erreur, le module qui passe cb est incité à utiliser et à examiner le premier argument, permettant une gestion correcte des erreurs.

Si l'erreur était passée comme deuxième argument, par exemple, il serait facile pour les programmeurs paresseux de l'ignorer simplement et de définir le rappel de telle sorte qu'il ne regarde que le premier argument.


0 commentaires

1
votes

Il s'agit du modèle de rappel de la première erreur établi au tout début du cœur de Node.JS et des bibliothèques développées dans son écosystème. C'est toujours un modèle courant, mais principalement subsumé par des choses comme les promesses ou async / await. Voici la section pertinente de la documentation Node.JS https://nodejs.org/api/errors .html # errors_error_first_callbacks .

L'autre option autre que null serait une instance d'un type quelconque d ' Erreur .


0 commentaires

1
votes

Le null signifie qu'il n'y a pas eu d'erreur et que vous appelez le rappel avec un achèvement réussi et une valeur résultante.

La convention de rappel asynchrone node.js est pour un rappel qui prend deux paramètres cela ressemblerait à ceci s'il s'agissait d'une fonction déclarée:

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

Le premier paramètre est une erreur ( null si aucune erreur, généralement une instance de objet Error s'il y a une erreur). Le second est une valeur (s'il n'y a pas eu d'erreur).

Donc, vous passez null comme premier argument quand il n'y a pas d'erreur et le second argument contiendra votre valeur.

Pour info, il existe une documentation node.js pour ce rappel style.


0 commentaires