Nodejs如何处理缺省+防注入情况

Node JS,使用MSSQL(注意是sql server,不是MySQL,但应该思想差不多把)如何在防SQL注入的情况下,设定查询条件默认值呢?

查询(增加时大概也要?)我想要的结果是,如果前端某个条件给的是空字符串'',那么我后端在这里查询时要不直接省略该条件要不附上or 1=1,使用的是字符串拼接:

let sql = ''
for (let k in req.body) {
    let str = (req.body[k] === '') ? '' : ' and ' + `${k} = ` + req.body[k]
    sql += str
}
//这里是剔除掉第一个and字符串
let querySql = `select *
                from userInfo
                where ${sql.slice(4)}
                order by OperationTime desc`

//如果前端传了Age,那就加上 Age = xx,否则就拼一个空字符串 ''
//querySql = `select * from userInfo where DeptID = 15 order by OperationTime desc`
//querySql = `select * from userInfo where DeptID = 15 and Age =23 order by OperationTime desc`

但是问题来了,如果前端传递的值为{Age: "18 or 1 = 1; update userinfo set age = 18"},那么这里就会导致该条件通过,并意外执行语句(这是我理解的SQL注入)

所以需要用防注入。看了下该模块的github,其中提到使用input去做防注入,就像这样

const testConn = new sql.ConnectionPool(testConfig)
    testConn.connect().then(pool => {
        pool.request()
            .input('DeptIDQ', sql.Int, req.body.DeptID)
            .input('AgeQ', sql.Int, req.body.Age)
            .query('select * from userinfo where DeptID = @DeptIDQ and Age = @AgeQ'
            ).then(result => {
            console.log('查询成功', result)
            res.send(result)
        }).catch(err => console.log(err))
    }).catch(err => {
        console.log('失败了', err)
    })

这样确实能处理防注入。但问题是如果没有传递该参数要怎么做缺省处理呢?譬如没有传递Age参数(或者是传递的''空字符串),那这个query就报错了,因为Age条件是空的。

有什么方法能同时处理这两个情况嘛?缺省+防注入

多加个判断完事