node写可选参数接口

💂 个人网站: 【紫陌】【笔记分享网】
💅 想寻找共同学习交流、共同成长的伙伴, 请点击【前端学习交流群】

今天写项目接口看到接口文档要求带四个参数两个参数必选两个可选,当时在想可选参数要怎么做,毕竟自己也没有写过。然后想了一天终于想出一个感觉不是最佳的方案,但是可以满足需求。今天特此加深记忆。

1.文档要求

简要描述:

  • 获取文章的列表数据

请求URL:

  • /my/article/list

请求方式:

  • GET

Header:

Authorization:Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MSwidXNlcm5hbWUiOiJhZG1pbiIsInBhc3N3b3JkIjoiIiwibmlja25hbWUiOiLms6Xlt7Tlt7QiLCJlbWFpbCI6Im5pYmFiYUBpdGNhc3QuY24iLCJ1c2VyX3BpYyI6IiIsImlhdCI6MTU3ODAzNjY4MiwiZXhwIjoxNTc4MDcyNjgyfQ.Mwq7GqCxJPK-EA8LNrtMG04llKdZ33S9KBL3XeuBxuI

参数:

参数名必选类型说明
pagenumint页码值
pagesizeint每页显示多少条数据
cate_idstring文章分类的 Id
statestring文章的状态,可选值有:已发布、草稿

2.书写接口

   在路由模块下 router/article.js

//获取文章列表
router.get('/list',article_handler.getArticle)

在业务逻辑模块下,router-handeler/article.js

//文章列表显示处理函数
exports.getArticle = (req, res) => {
  //解构请求带来的参数
  const { cate_id, state } = req.body
  //pagesize一页展示多条数据  pagesize前端传来的可选参数,如果没传给个默认值5。传来的是字符串需要parseInt()函数转化
  const pagesize = parseInt(req.body.pagesize) || 5
  //pagenum当前第几页  pagenum前端传来的可选参数,如果没传给个默认值1。传来的是字符串需要parseInt()函数转化
  const pagenum = (parseInt(req.body.pagenum) - 1) * pagesize || 1
  //flag表示sql的参数情况
  let flag = [];
  // 定义全带参数的SQL语句,
  let sql = `  SELECT a.Id,a.title,a.pub_date,a.state,b.name
  FROM ev_articles a ,ev_article_cate b 
  WHERE a.is_delete = 0 AND  ? = b.Id AND b.is_delete = 0 AND a.state = ?
  ORDER BY a.id ASC 
  LIMIT ? , ? `
  
  // 判断cate_id和state是否带了参数
  if (cate_id === undefined && state === undefined) {
    flag = [pagenum, pagesize]
    //定义SQL语句
    sql = sql.replace('AND  ? = b.Id','AND a.cate_id = b.Id ').replace('AND a.state = ?','')
  } else if (state === undefined) {
    flag = [cate_id, pagenum, pagesize]
    //定义SQL语句
    sql =sql.replace('AND a.state = ?','')
  } else if (cate_id === undefined) {
    flag = [state, pagenum, pagesize]
    //定义SQL语句
    sql = sql.replace('AND  ? = b.Id','AND a.cate_id = b.Id ')
    console.log(sql);
  } else {
    flag = [cate_id, state, pagenum, pagesize]
  }
console.log(req.body);
  //执行SQL语句
  db.query(sql, flag, (err, results) => {
    // 执行 SQL 语句失败
    if (err) return res.cc(err)
    // 执行 SQL 语句成功
    res.send({
      status: 0,
      message: '获取文章列表成功!',
      data: results,
    })
  })
}

重点看那两个可选参数,处理的方法大概就是:

先定义一条带四个参数(全部参数)的SQL语句,

然后根据前端发请求是否带参数进行判断,

如果没有带参数就把对应的占位符的SQL条件用replace()函数替换成空,

然后在最外面定一个参数空数组flag来存放参数。如果前端传几个参数就往里数组填几个参数。

以我目前知识感觉这不是最好方案,如果还有大佬知道别的方案可以告诉我,你们写可选参数的时候怎么做的呢?欢迎评论区聊聊!!!

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值