我如何将jsdoc参数传给web请求?

How do I jsdoc parameters to web request?

我有这样的功能(在 Node.js/Firebase 中),想知道如何添加 JSDoc 格式的文档:

exports.getUserRes = functions.https.onRequest(async (request, response) => {...}

如何将 GET/POST/etc 参数记录到 request

我刚刚发现一个老问题的答案似乎提出了一个好方法。我的意思是这不是公认的答案,而是@Steven Spunkin 的答案:

javascript - How to annotate Express middlewares with JSDoc? - Stack Overflow How to annotate Express middlewares with 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){ ... }

我结合了How to annotate Express middlewares with JSDoc?中的其他答案并修改了一些代码,
它可以包括在 express.Request 和事件自定义请求正文中定义的所有 methods/properties。
它不仅可以在 request.body 中使用,而且还支持在 req.query.
中使用 那是因为 express.Request 支持泛型,所以我们可以在 JSDOC 中使用它。

首先,记得安装 @types/expressnpm install --save-dev @types/express

其次,设置如下代码。

// @ts-check
/**
 * @typedef {object} showRequestBody
 * @property {string} name this is name in request body
 * @property {number} age this is age in request body
 * 
 * @typedef {object} showRequestQuery
 * @property {string} name this is name in query
 * @property {number} age this is age in query
 * 
 * @param {import('express').Request<{}, {}, showRequestBody, showRequestQuery>} req
 * @param {import('express').Response} res 
 * @param {import('express').NextFunction} next 
 */
exports.show = function(req, res, next) {
};

注意:我在vscode中使用它。


express.Request上定义的其他methods/properties,例如req.headers


req.body提示


req.query提示