可同时处理查询和参数的NodeJs Express app.get

时间:2019-01-04 23:50:02

标签: javascript node.js sql-server express routes

我正在尝试创建REST服务。下面的路由将执行一个存储过程,该过程将返回json结果

app.get('/spparam', function (req, res) {
var sql = require("mssql");

// config for your database
var id=0;
var config = {
    user: 'username',
    password: 'password',
    server: 'hostname', 
    database: 'databasename' 
};
// connect to your database
sql.connect(config, function (err) {

    if (err) console.log(err);

    // create Request object
    var request = new sql.Request();

    if(!mylib.isEmptyObject(req.query)){
        id=req.query.id;
    }else if(!mylib.isEmptyObject(req.params)){
        id=req.params["id"];
    }
    // Executing Stored Prcoedure       
    request.input('requestid', sql.Int, id)
        .execute("Request_Get_ById").then(function(recordSet) {
            //console.dir(recordsets);
            //console.dir(err);
            res.send(recordSet);
            sql.close();
        }).catch(function(err) {
            console.log(err);
        });
    });
});

我想通过创建一条处理查询(/ spparam?id = 1)和参数(/ spparam /:id /)的路由来最小化代码。这可能吗?有没有更好的方法来处理我需要的东西?

1 个答案:

答案 0 :(得分:0)

是的,您可以使用Express来做到这一点:

app.get('/spparam/:id?', function (req, res) {
  const id = req.params.id || req.query.id;
  // the rest of your function, and use id without caring about whether
  // it came from params or query
  // change order if you want to give preference to query
}

Express.js docs说它使用path-to-regexp进行路由匹配。在那里,您可以看到以下报价:

  

可以在参数后加上问号(?),以使   参数可选。

在javascript中,如果var a = b || c不是false-y,则构造ba的值分配给b,否则它将分配{ {1}}至c