什么's将数组传递给app.get()的第一个参数的替换项

What's the replacement for passing an array to the first argument of app.get()?

本文关键字:get 第一个 替换 参数 app 数组 什么      更新时间:2023-09-29

在过去,你可以做这样的事情:

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

以便使用相同的路由处理程序具有多个路由。

几个堆栈溢出答案表明此行为已被弃用,不应再使用。

除了丑陋的正则表达式或半破解(如将函数放入变量中并将其传递给两个不同的app.get()调用)之外,除了将数组作为第一个参数传递之外,还有什么优雅的选择吗?

这样做:

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);
});