В Node/Express, как получить текущий обработчик маршрута?

#node.js #express

Вопрос:

Как мне получить синтаксис/имя текущего обработчика маршрута, игнорируя текущие конкретные значения параметров?

напр.:

 app.get('/users/:id', (req, res) => {
    let route = ?
    console.log(route) // --> "/users/:id"
})
 

(Вопрос 2 — могу ли я сделать это в функции промежуточного программного обеспечения?)

Комментарии:

1. все в req.route.path порядке, и да, вы можете

Ответ №1:

Правильный ответ таков req.route.path

напр.

1. Вызов непосредственно из основного файла (app.js / index.js):

 app.get('/admin/:foo/:bar/:baz', async (req, res) => {
    console.log(req.originalUrl);
    console.log(req.url);
    console.log(req.path);
    console.log(req.route.path);  // this one is your answer
    console.log(req.baseUrl);
    console.log(req.hostname);
    res.sendStatus(200);
});
 

Вызов API:

 http://localhost:3000/admin/a/b/c
 

Выход

/admin/a/b/c (Оригинал)
/admin/a/b/c (url)
/admin/a/b/c (путь)
/admin/:foo/:bar/:baz (маршрут.путь)
<nothing> (Базовый уровень)
localhost (имя хоста)


2. Вызов из модуля:

app.js

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

...

const users = require('./users');
app.use('/api/users', users);
 

users.js

 const express = require('express');
const router = express.Router();

...

router.get('/admin/:foo/:bar/:baz', async (req, res) => {
    console.log(req.originalUrl);
    console.log(req.url);
    console.log(req.path);
    console.log(req.route.path);  // this one is your answer
    console.log(req.baseUrl);
    console.log(req.hostname);
    res.sendStatus(200);
});
 

Вызов API:

 http://localhost:3000/api/users/admin/a/b/c
 

Выход

/api/users/admin/a/b/c (Оригинал)
/admin/a/b/c (url)
/admin/a/b/c (путь)
/admin/:foo/:bar/:baz (маршрут.путь)
/api/users (Базовый уровень)
localhost (имя хоста)

Ответ №2:

Вы можете увидеть ниже пример для получения информации об req объекте, который вы получаете.

/users может быть получен из req.baseUrl и :id может быть получен из req.params.id

 app.use('/admin', function (req, res, next) { // GET 'http://www.example.com/admin/new?a=b'
  console.dir(req.originalUrl) // '/admin/new?a=b' (WARNING: beware query string)
  console.dir(req.baseUrl) // '/admin'
  console.dir(req.path) // '/new'
  console.dir(req.baseUrl   req.path) // '/admin/new' (full path without query string)
  next()
})

 

Комментарии:

1. ОП хочет /users/:id

2. @LawrenceCherone я даю более подробный пример использования со всеми другими возможными вариантами.

3. хорошо, но это не включает в себя то, что хочет ОП , то есть , если его '/admin/:foo/:bar/:baz' , ОП, кажется, хочет /admin/:foo/:bar/:baz , перечитайте вопрос

4. @LawrenceCherone /users можно req.baseUrl :id получить и можно получить от req.params.id

5. @Феринпатель ! OP не хочет «значение» идентификатора, но хочет точный маршрут, т. е. /users/:id не /users/john или /users/1