Express параметры соответствия маршрутизатора - PullRequest
0 голосов
/ 10 марта 2020

Предполагается, что у меня есть два маршрута, один с параметрами, один без:

  • / foo? Bar
  • / foo

Я хочу использовать два разные обработчики для этих двух маршрутов. Я знаю, что могу сделать что-то вроде этого

app.use('/foo', (req, res) => {
  if (req.params.foo !== undefined) {
    // do something
  } else {
    // do something else
  }
})

Но это усложнит чтение кода. Есть ли способ сопоставить маршрут с параметром? Я хотел бы справиться с этой ситуацией:

app.use('/foo', x);
app.use('/foo?bar', y);

Ответы [ 2 ]

1 голос
/ 10 марта 2020

Насколько я знаю, запросы не могут быть отфильтрованы на обработчике use. Вместо этого я разобрался с очень похожей ситуацией, используя next.

app.use('/foo', (req, res, next) => {
    if (req.query.foo !== undefined) return next(); 
    //if foo is undefined, it will look for other matching route which will probably the next '/foo' route


    /* things to do with foo */
});

app.use('/foo', (req, res) => {
   //things to without foo
});

https://expressjs.com/en/guide/using-middleware.html этот документ также может помочь вам

0 голосов
/ 10 марта 2020

Как насчет этого?

const express = require('express');
const app = express();

// curl -X GET http://localhost:3000/foo
app.get('/foo', function (req, res, next) {
    res.send('This is foo');
});

// curl -X GET http://localhost:3000/foo/bar
app.get('/foo/:?bar', function (req, res, next) {
    res.send('This is foo with bar');
});

app.listen(3000);
...