postman测试接口正常,swagger文档上测试接口报错是为什么?

postman上测试:

swagger文档上测试:

显示 ValidationError: "username" is required

接口是用node+express+mysql写的,以下是部分代码:

//第一部分router/user.js-----------------------------------------------------------

/**
 * 用户登录
 * @route POST /api/user/login
 * @group user - 用户
 * @param {string} username.query.required - 请输入账号
 * @param {string} password.query.required - 请输入密码
 * @returns {object} 200 - 登录成功的用户信息
 * @returns {Error} default - 登录失败的错误信息
 */

const express = require("express");
const router = express.Router();

//导入用户路由处理函数模块
const userHandler = require("../router_handler/user");
// 1. 导入验证表单数据的中间件
const expressJoi = require("@escook/express-joi");
// 2. 导入需要的验证规则对象
const { reg_login_schema } = require("../schema/user");
//登录
router.post("/login", expressJoi(reg_login_schema), userHandler.login);
module.exports = router;

//第二部分:router_handler/user--------------------------------------------------------
exports.login = (req, res) => {
  const userinfo = req.body
  if( !userinfo.username || !userinfo.password) return res.cc('用户名或密码不能为空')
  const sql = 'select * from users where username= ?'
  db.query(sql,userinfo.username, async(err,results)=> {
    if(err) return res.cc(err)
    if(results.length == 0 ) return res.cc('用户名不存在')

    //  console.log( results,'结果');
     //bcrypt.compareSync为同步方法 bcrypt.compare为异步方法,推荐使用异步避免阻塞事件循环
      let compare=await bcrypt.compare(userinfo.password, results[0].password)
      console.log(compare);//返回的是布尔值,比对成功返回的是true,否则为false
      if(!compare) return res.cc('密码错误')

      //在服务器端生成token的字符串
      const user = { ...results[0],password:'',user_pic:''}
      //对用户的信息进行加密,生成 token 字符串
      const tokenStr = jwt.sign(user,config.jwtSecretKey,{expiresIn:config.expiresIn})
      console.log(tokenStr);
      res.send({
        status:0,
        message:'登录成功',
         // 为了方便客户端使用 Token,在服务器端直接拼接上 Bearer 的前缀
        token: 'Bearer ' + tokenStr,
      })
      
    
   
  })
 
};

//第三部分 ==验证规则===----------------------------------------------------------
//用户名的验证规则
const username = joi.string().alphanum().min(1).max(10).required()
//密码的验证规则
const password = joi.string().pattern(/^[a-zA-Z0-9@_.]+$/).min(6).max(12).required()
exports.reg_login_schema = {
  body:{
    username,
    password,
  }
}

//第四部分---------------------------------------------------------------------------
/项目入口文件  
const express = require('express') 
//1.创建 express 的服务器实例 
const app = express()


const expressSwagger = require('express-swagger-generator')

//配置Swagger生成器
let options = {
  swaggerDefinition: {
    info: {
      description: 'This is a sample server',
      title: 'Swagger',
      version: '1.0.0'
    },
    host: 'localhost:8081',
    basePath: '/',
    produces: ['application/json', 'application/xml'],
    schemes: ['http', 'https'],
    securityDefinitions: {
      JWT: {
        type: 'apiKey',
        in: 'header',
        name: 'Authorization',
        description: ''
      }
    }
  },
  route: {
    url: '/swagger',
    docs: '/swagger.json' //swagger文件 api
  },
  basedir: __dirname, //app absolute path
  files: ['./router/*.js'] //接口文件夹路径
}
expressSwagger(app)(options)

//2.导入并配置 cors 中间件,允许Express应用处理跨域请求
const cors = require('cors')
app.use(cors())
app.use(express.urlencoded({ extended: false }))
const joi = require('joi')
const userRouter = require('./router/user')
app.use('/api/user',userRouter)
app.listen(8081,function(){
  console.log('api server running at http://127.0.0.1:8081');
  
})

  • 8
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值