我目前正在构建一个小型快速支持的节点应用,以便为我写的节点模块中的RESTful API提供数据。模块中的一个函数有三个参数,但我想通过只指定一个,两个,另外两个或所有三个参数来允许使用API。
所以即使开始写这样的路线也已经很荒谬了。
app.get('/api/monitor/:stop/:numresults', apiController.monitorNum);
app.get('/api/monitor/:stop/:timeoffset', apiController.monitorOff);
app.get('/api/monitor/:stop', apiController.monitor);
特别是因为我不知道如何指定前两者之间的差异,因为numresults和timeoffset都只是整数。
在这种情况下,最佳做法是什么样的?
答案 0 :(得分:1)
你面临的第一个问题是你有相同的路线,如果你使用快递是不可能的(我假设你正在使用它)。相反,您可能需要一条路线并改为使用查询对象:
app.get('/api/monitor/:stop/', function (req, res, next) {
var stop = req.params.stop,
numResults = req.query.numResults,
timeOffset = req.query.timeOffset;
yourFunc(stop, numResults, timeOffset);
});
这样你就可以使用以下网址调用api:http://example.com/api/monitor/somethingAboutStop/?numResults=1&timeOffset=2
。看起来stop参数也可以移动到查询对象,但这取决于你。
答案 1 :(得分:0)
您可以使用catchall路线然后自己解析。
示例:
app.get('/api/monitor/*', apiController.monitor);
然后在apiController.monitor中你可以进一步解析url:
exports.monitor = function(req, res) {
var parts = req.url.split('/');
console.log(parts); // [ '', 'api', 'monitor', '32', 'time' ]
console.log(parts.length); // 5
res.end();
};
所以,点击/ api / monitor / 32 /时间,就可以得到上面的那个数组了。点击/ api / monitor / something / very / long / which / you / can / parse,你可以看到每个参数的去向。
或者您可以自助,例如/api/monitor/page/32/offset/24/maxresults/14/limit/11/filter/by-user
尽管如Deif已经告诉过你的那样,你通常会对查询参数进行分页,maxResults&页面是你常用的参数。