【问题标题】:NodeJs Express app.get that handles both query and paramsNodeJs Express app.get 处理查询和参数
【发布时间】:2019-01-04 23:50:02
【问题描述】:

我正在尝试创建 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/) 的路由来最小化我的代码。这可能吗?有没有更好的方法来处理我需要的东西?

【问题讨论】:

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


    【解决方案1】:

    是的,您可以像这样使用 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 中,如果 b 不是 false-y,则构造 var a = b || cb 的值分配给 a,否则将 c 的值分配给 a

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-31
      • 1970-01-01
      • 2013-10-01
      • 1970-01-01
      • 2022-06-20
      • 1970-01-01
      相关资源
      最近更新 更多