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 }
3 Réponses :
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.
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
.
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.
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é"));