将数组传递给app.get()的第一个参数的替代方法是什么?

时间:2015-02-11 20:42:45

标签: javascript node.js express

过去,你可以这样做:

app.get(['/', '/dashboard'], (req, res, next) => { ... });

为了使用相同的路由处理程序来拥有多个路由。

多个Stack Overflow答案表明此行为已弃用,不应再使用。

除了丑陋的正则表达式或半黑客攻击,比如将函数放入变量并将其传递给2个不同的app.get()调用之外,是否只有传递数组作为第一个参数的优雅替代方法?

1 个答案:

答案 0 :(得分: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);
});