Есть ли способ сделать это за один вызов функции?
var todo = function (req, res){};
app.get("/", todo);
app.get("/blabla", todo);
app.get("/blablablabla", todo);
Что-то вроде:
app.get("/", "/blabla", "/blablablabla", todo );
Я знаю, что это синтаксический беспорядок, но просто для того, чтобы дать представление о том, чего я хотел бы достичь, массив маршрутов был бы потрясающим!
Кто-нибудь знает, как это сделать?
Ответы:
Я столкнулся с этим вопросом, ища ту же функциональность.
@Jonathan Ong упомянул в комментарии выше, что использование массивов для путей устарело, но это явно описано в Express 4 и работает в Express 3.x. Вот пример того, что можно попробовать:
Изнутри
request
объекта, с путем/hooplul/poo?bandle=froo&bandle=pee&bof=blarg
:Обратите внимание на то, что происходит с params: он знает о группах захвата и params во всех возможных путях, независимо от того, используются они в текущем запросе или нет.
Таким образом, сложение нескольких путей через массив может быть легко выполнено, но побочные эффекты могут быть непредсказуемыми, если вы надеетесь извлечь что-нибудь полезное из пути, который использовался с помощью параметров или групп захвата. Вероятно, это более полезно для избыточности / псевдонимов, и в этом случае это будет работать очень хорошо.
Изменить: также см. Ответ @ c24w ниже .
Изменить 2: это умеренно популярный ответ. Имейте в виду, что ExpressJS, как и большинство библиотек Node.js, - это подвижный праздник. Хотя приведенная выше маршрутизация по-прежнему работает (я использую ее сейчас, очень удобную функцию), я не могу поручиться за вывод объекта запроса (он определенно отличается от того, что я описал). Пожалуйста, проверьте внимательно, чтобы убедиться, что вы получите желаемые результаты.
источник
:var
устанавливает то,req.param
что вы не используете. он используется только в этом случае для установки регулярного выражения.(bla|blabla)
устанавливает соответствие регулярному выражению, поэтому оно соответствует строкамbla
иblablah
.?
делает все регулярное выражение необязательным, поэтому оно также совпадает/
.источник
/bla(bla)?
также работает, но любые параметры после него не заполняются должным образом (т.е./bla(bla)?/:value
не заполняютсяreq.params.value
). Кто-нибудь знает почему?req.params.var
но вам нужно убедиться, что выreq
перешли к функцииФактически вы можете передать массив путей , как вы упомянули, и это отлично работает:
источник
Чтобы уточнить ответ Кевина , это из документов 4.x :
У них есть несколько примеров , в том числе:
источник
Я пошел на:
источник
потребовать файл исходного маршрута и определить новый маршрут следующим образом
источник