#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