J'essaie de documenter un middleware Express, mais l'outil de validation intégré de WebStorm m'indique que les types ne sont pas affectés correctement dans le bloc JSDoc suivant:
/**
* My middleware.
*
* @param {Object} req
* @param {Object} res
* @param {Function} next
* @return {Object}
*/
exports.show = function(req, res, next) {
...
};
Dans les sources Express, je n’ai trouvé aucun @typedef
pour m'aider. De plus, je veux éviter des choses comme @param {*}
.
Quelle est la bonne façon de documenter le middleware Express à l'aide de JSDoc? Merci pour toute aide.
Tout d'abord, nous convenons que les middlewares sont des fonctions; aucune déclaration de type spécial ne sera généralement justifiée. Au-delà de cela, les intergiciels ont tendance à être fortement découplés - modular -, ce qui signifie que la balise @module
est généralement applicable (et cela a de bonnes conséquences lorsque vous exécutez jsdoc).
/**
* Description of my middleware.
* @module myMiddleware
* @function
* @param {Object} req - Express request object
* @param {Object} res - Express response object
* @param {Function} next - Express next middleware function
* @return {undefined}
*/
La balise de retour est facultative selon votre guide de style, car le middleware ne renvoie pas de valeur. Enfin, contrairement à ce que prétendent Nick et mmm, le paramètre next
est une fonction.
http://expressjs.com/fr/guide/using-middleware.html
Les fonctions middleware sont des fonctions qui ont accès à l’objet request (Req), à l’objet réponse (res) et à la fonction middleware suivante Dans le cycle requête-réponse de l’application. La fonction middleware suivante est communément désignée par une variable nommée next.
next
n'est pas une préparation sophistiquée interne à Express; Express transmet à chaque fonction middleware la requête, la réponse et la fonction middleware suivante dans la pile, comme suit:
mw1 = function(req, res, next){}.bind(undefined, req, res, mw2)
mw2 = function(req, res, next){}.bind(undefined, req, res, mw3)
La valeur de next
dans la portée de mw1
est mw2
.
npm install --save-dev @types/express
@param {e.Response} res
/node_modules/@types/express/index.d.ts
...
declare namespace e {
...
export interface Response extends core.Response { }
...
installer les types via Paramètres> Langages & Frameworks> Javascript> Bibliothèques> @ types/express
Vous pouvez non seulement JsDoc les types de paramètres et les descriptions, mais aussi leurs membres attendus.
/**
*
* @module myMiddleware
* @function
* @param req {Object} The request.
* @param res {Object} The response.
* @param req.params.foo {String} The foo param.
* @param req.query.bar {String} The bar query.
* @param req.body {Object} The JSON payload.
* @param {Function} next
* @return {undefined}
*/
function foo(req, res, next){
}
req
, res
et next
sont tous des objets, et un middleware ne renvoie généralement pas, les éléments suivants peuvent donc être utilisés.
/**
* My Middleware
* @name MyMiddleWare
* @function
* @param {Object} req
* @param {Object} res
* @param {Object} next
*/
La seule chose que vous devez changer est le @param {Function}
à côté de @param {Object}
. De plus, @return
devrait décrire ce que la fonction retourne; par exemple, (Object, Array)
ou une combinaison ({Object|Null})