我正在尝试创建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 /)的路由来最小化代码。这可能吗?有没有更好的方法来处理我需要的东西?
答案 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,则构造b
将a
的值分配给b
,否则它将分配{ {1}}至c
。