如何在Express/Node中通过Swagger将参数传入req.body?
如何在Express/Node项目中通过Swagger将参数传入req.body?
嘿,我来帮你搞定这个问题!你当前的Swagger配置是把登录参数放在URL查询字符串(query)里,但如果想让参数进到Express的req.body中,我们需要把参数定义从parameters改成请求体(requestBody)——这才是POST请求传递结构化参数的标准方式。
具体修改步骤:
- 移除原有的
parameters数组:因为query参数是挂在URL上的,而我们要的是请求体参数,所以这个数组可以直接删掉。 - 添加
requestBody字段:用来定义请求体里的参数结构,同时指定参数的媒体类型(比如常用的application/json)。 - 确保Express配置了解析JSON的中间件:这一步绝对不能忘!如果没加
express.json(),哪怕Swagger配置对了,req.body也会是undefined。
修改后的完整Swagger配置示例:
"/auth/sign-in": { "post": { "summary": "站点登录", "description": "您可以使用登录账号和密码进行站点登录。", "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "required": ["email", "password"], "properties": { "email": { "type": "string", "description": "请在此传入邮箱" }, "password": { "type": "string", "description": "请在此传入密码" } } } } } }, "responses": { "200": { "description": "您将在此获取token", "content": { "application/json": { "example": { "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..." } } } } } } }
额外关键提醒:
在你的Express项目入口文件(比如app.js或server.js)里,一定要在路由定义之前加上这个中间件,用来解析JSON格式的请求体:
const express = require('express'); const app = express(); // 解析JSON请求体,必须放在路由挂载前 app.use(express.json()); // 之后再挂载你的业务路由 app.use('/auth', require('./routes/auth'));
修改完成后,Swagger UI里会显示一个JSON输入框,你在这里填写邮箱和密码发送请求,这些参数就会自动出现在req.body里啦。
内容的提问来源于stack exchange,提问作者Andrey Radkevich
相关产品推荐
相关产品推荐

