【发布时间】:2022-02-13 09:02:57
【问题描述】:
我想要一个通用中间件,它可以采用“req.route.path”值(例如“/foo/:id”而不是实际的 URL 值“/foo/123”)并在 HTTP 响应标头中返回它称为“X-ROUTE-NAME”。这个想法是让这个路由值被单独的日志/度量基础设施记录和记录,并允许路由名称上的“分组依据”用于以后的其他分析目的。
这是我的第一次尝试:
app.use(function(req, res, next) {
const {path} = req.route;
console.log("The path was:", path);
res.setHeader("X-ROUTE-NAME", req.route.path);
next();
});
它不起作用,因为如果你在注册路由之前放置它,它在req.route.path 中还没有任何值。但是,如果您在路由之后注册它,如果处理程序已经在 req 上发送了内容,那么当您尝试设置标头时会出现异常。
所以,是的,棘手的部分是弄清楚如何在路由器设置“req.route.path”值之后(并将其作为标头保存到响应中),但在处理程序拾取它之前(因为处理程序可以根据需要发送内容,然后您将无法再设置标题)。
有什么想法吗?
【问题讨论】:
-
什么 routers.middleware 负责添加
req,route?你能说明你是如何注册的吗? -
我正在使用 express.Router。比如:
const router = express.Router(); router.get(“/foo/:fooId”, someHandler);。这里的关键是我想将它作为我公司内部的共享中间件库发布。 -
好的,你能在注册所有路由器的地方添加代码并指出你需要中间件的地方吗?
-
想象一下像上面这样的多个
router.get调用,我想要一个中间件来添加所需的标头,而不管哪个路由被解析。 -
router.use(yourMiddleWare)也不起作用?router.get(“/foo/:fooId”, yourMiddleware, someHandler);呢?