如何獲取當前路由處理程式的語法/名稱,而忽略當前的特定引數值?
例如:
app.get('/users/:id', (req, res) => {
let route = ?
console.log(route) // --> "/users/:id"
})
(問題 2 - 我可以在中間件函式中執行此操作嗎?)
uj5u.com熱心網友回復:
正確答案是 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. 從模塊呼叫:
應用程式.js
const express = require('express');
const app = express();
...
const users = require('./users');
app.use('/api/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/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)
uj5u.com熱心網友回復:
您可以查看以下示例,了解有關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()
})
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/328289.html
上一篇:如何有條件地呼叫路由器級中間件?
