提问人:Madara's Ghost 提问时间:2/12/2015 更新时间:12/12/2015 访问量:224
将数组传递给 app.get() 的第一个参数的替代品是什么?
What's the replacement for passing an array to the first argument of app.get()?
问:
在过去,你可以做这样的事情:
app.get(['/', '/dashboard'], (req, res, next) => { ... });
以便使用相同的路由处理程序拥有多个路由。
一些 Stack Overflow 答案表明此行为已弃用,不应再使用。
除了丑陋的正则表达式或半黑客(例如将函数放入变量并将其传递给 2 个不同的调用)之外,还有没有一种优雅的替代方案,而不是仅将数组作为第一个参数传递?app.get()
答:
1赞
chapinkapa
3/5/2015
#1
执行以下操作:
var express = require('express');
var app = express();
var originalExpressGet = app.get;
app.get = (function() {
var expressApp = app;
function turnToArray(args){
var array = [];
for(var i = 0; i < args.length; i++){
array.push(args[i]);
}
return array;
}
return function(routes, callback) {
var args = turnToArray(arguments);
if(args.length <= 1){
return originalExpressGet.apply(app, arguments);
}
if(!Array.isArray(routes)){
routes = [routes];
}
args.shift();
routes.forEach(function(route){
originalExpressGet.apply(app, [route].concat(args));
});
}
return app;
}());
这样一来,您仍然使用 express 的 app.get,但它允许您将 [] 用于多个路由。例如,这适用于:
app.get(['/', '/same'], function(req, res){
res.send(true);
});
这也是这样做的:
app.get('/another route', function(req, res){
res.send(true);
});
评论
router.get('/', getRoute); router.get('/:page', getRoute);
/
/:page