首页 > 解决方案 > 使查询的参数可选?

问题描述

我正在使用繁琐的 msSqlConnecter。我有一个查询,它根据前端提供的参数进行过滤。我希望参数是可选的,并允许用户不提供它们或只提供两者之一。有没有办法根据 field2 的存在来放置 if 语句?

我收到以下错误:

RequestError:参数“field2”的验证失败。无效号码。

代码:

var thequery1 = `SELECT country
                        ,sales 
                        ,[Units Sold] as sold
                        ,thedate
                 FROM financial
                 WHERE 1 = 1
                   AND country = @field1
                   AND [Units Sold] > @field2`;

Promise.all([queryTablewithPararams(thequery1, req.body.field1, req.body.field2)])
        .then(
            data => res.json(data)
        );

function queryTablewithPararams(thequery1, field1, field2) {
    return new Promise(function(resolve, reject) {
        var con = new msSqlConnecter.msSqlConnecter(config);
        con.connect().then(function() {
            new con.Request(thequery1)
                .addParam("field1", TYPES.VarChar, field1)
                .addParam("field2", TYPES.Int, field2)
                .onComplate(function(count, datas) {
                    resolve(datas);
                }).onError(function(err) {
                    console.log(err);
                }).Run();
        }).catch(function(ex) {
            console.log(ex);
        });
    });
}

标签: node.jssql-servertedious

解决方案


只需field2在作为参数发送之前进行验证

if (isNaN(field2) || field2 == null) { field2 = 0; }

   function queryTablewithPararams(thequery1, field1, field2) {
        if (isNaN(field2) || field2 == null) { field2 = 0; }
        return new Promise(function(resolve, reject) {
            var con = new msSqlConnecter.msSqlConnecter(config);
            con.connect().then(function() {
                new con.Request(thequery1)
                    .addParam("field1", TYPES.VarChar, field1)
                    .addParam("field2", TYPES.Int, field2)
                    .onComplate(function(count, datas) {
                        resolve(datas);
                    }).onError(function(err) {
                        console.log(err);
                    }).Run();
            }).catch(function(ex) {
                console.log(ex);
            });
        });
    }

推荐阅读