nodejs如何多条件查询?

一个列表接口,目前是这样写 我感觉我要疯了,求优化方案

router.post('/list', (req, res) => {
    let params = req.body;
    // SQL
    let sql = `
        SELECT 
            *
        FROM 
            content
    `;
    if(params.cityId){
        sql = sql + ` WHERE cityId='${params.cityId}'`;
        // 县
        if(params.regionId){
            sql = sql + ` and regionId='${params.regionId}'`;
        }
        // 按时间
        if(params.filter == '1'){
            sql = sql + ` order by modifTime ${params.order}`;
        }
        // 按点赞
        if(params.filter == '2'){
            sql = sql + ` order by zan ${params.order}`;
        }
        // 按收藏
        if(params.filter == '3'){
            sql = sql + ` order by collect ${params.order}`;
        }
        // 按评论
        if(params.filter == '4'){
            sql = sql + ` order by commentNum ${params.order}`;
        }
        // 按价格
        if(params.filter == '5'){
            sql = sql + ` order by price ${params.order}`;
        }
        // 分页
        let pageSize = 20;
        let pageNum = (params.pageNum -1)*pageSize;
        sql = sql + ` limit ${pageNum},${pageSize}`;
    }
    // 执行
    $db.query(sql)
    .then(data=>{
        // 返回给前端
        res.json({
            code:200,
            msg:"操作成功",
            data:data
        });
        res.end();
    })
})
阅读 4.7k
3 个回答

我的天。。。。这个竟然不考虑用ORM

建议使用sequelize

我口胡一个:

if(params.cityId) {
    sql = sql + ` WHERE cityId='${params.cityId}'`;
    
    // 县
    if(params.regionId) {
        sql = sql + ` and regionId='${params.regionId}'`;
    }
    
    const filterNames = {
        1: "modifTime",     // 按时间
        2: "zan",           // 按点赞(迷惑命名)
        3: "collect",       // 按收藏
        4: "commentNum",    // 按评论
        5: "price",         // 按价格
    };

    if(params.filter) {
        sql = sql + ` order by ${filterNames[params.filter]} ${params.order}`;
    }
    
    // 分页
    let pageSize = 20;
    let pageNum = (params.pageNum - 1) * pageSize;
    sql = sql + ` limit ${pageNum},${pageSize}`;
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题