在Node/Express中,如何获取当前路由处理程序?



如何获取当前路由处理程序的语法/名称,忽略当前特定的参数值?

例如:

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

(问题2 -我可以在中间件函数中做到这一点吗?)

正确答案是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(originalUrl)
/admin/a/b/c(url)
/admin/a/b/c(path)
/admin/:foo/:bar/:baz(route.path)
<nothing>(baseUrl)
localhost(hostname)


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(originalUrl)
/admin/a/b/c(url)
/admin/a/b/c(path)
/admin/:foo/:bar/:baz(route.path)
/api/users(baseUrl)
localhost(hostname)

你可以看到下面的例子关于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()
})