Expressミドルウェアをドキュメント化しようとしていますが、WebStormの組み込み検証ツールにより、次のJSDocブロックで型が誤って割り当てられていることがわかります。
/**
* My middleware.
*
* @param {Object} req
* @param {Object} res
* @param {Function} next
* @return {Object}
*/
exports.show = function(req, res, next) {
...
};
Expressのソースでは、私を助ける@typedef
sが見つかりませんでした。また、@param {*}
のようなものは避けたいです。
JSDocを使用してExpressミドルウェアを文書化する正しい方法は何ですか?助けてくれてありがとう。
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 { } ...
[設定]> [言語とフレームワーク]> [JavaScript]> [ライブラリ]> [@ types/express]からタイプをインストールします
まず、ミドルウェアは機能であることに同意します。通常、特別な型宣言は必要ありません。それ以上に、ミドルウェアは高度に分離される傾向があります—modular—これは、通常@module
タグが適用できることを意味します(これは、 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}
*/
ミドルウェアは値を返さないため、スタイルガイドによっては戻りタグはオプションです。最後に、Nickとmmmの主張に反して、next
パラメータは関数です。
http://expressjs.com/en/guide/using-middleware.html
ミドルウェア関数は、要求オブジェクト(req)、応答オブジェクト(res)、およびアプリケーションの要求/応答サイクル内の次のミドルウェア関数にアクセスできる関数です。 次のミドルウェア関数は、一般的にnextという名前の変数で示されます。
next
は、派手なExpress内部の調合ではありません。 Expressは、次のように、各ミドルウェア関数に要求、応答、およびスタック内の次のミドルウェア関数を渡します。
mw1 = function(req, res, next){}.bind(undefined, req, res, mw2)
mw2 = function(req, res, next){}.bind(undefined, req, res, mw3)
mw1
のスコープ内のnext
の値はmw2
です。
ミドルウェアを文書化できます
const express = require("express");
/**
* @param {express.Request} req
* @param {express.Response} res
* @param {express.NextFunction} next
*/
function (req, res, next) {}
reqに属性を追加するミドルウェアがある場合、それらを追加することもできます
const express = require("express");
/**
* @param {express.Request & {specialParam1 : string, specialParam2 : any}} req
* @param {express.Response} res
* @param {express.NextFunction} next
*/
function (req, res, next) {}
またはイベントを改善するには、「req」に追加された新しいelemのソースごとにtypedefを作成し、「&」を使用してそれらすべてを組み合わせたタイプを作成します。
JsDocでパラメーターのタイプと説明だけでなく、それらの予期されるメンバーもできます。
/**
*
* @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
、およびnext
はすべてオブジェクトであり、通常、ミドルウェアは返されないため、以下を使用できます。
/**
* My Middleware
* @name MyMiddleWare
* @function
* @param {Object} req
* @param {Object} res
* @param {Object} next
*/
変更する必要があるのは@param {Function}
の隣に @param {Object}
。また、@return
は、関数が返すものを説明する必要があります。例:(Object, Array)
または組み合わせ({Object|Null})