是否有可能获得快速路由器的基本URL

我有一个身份validation中间件,需要调用外部服务并提供callbackURL。 例如:

var express = require('express'); var app = express(); // This will work just fine app.use('/', getAuthRouter()); // The redirects here will end up going to /oauth/callback // instead of /admin/oauth/callback app.use('/admin', getAuthRouter()); function getAuthRouter() { var authRouter = express.Router(); // Setup auth routes var callbackUrl = '/oauth/callback'; var loginUrl = '/login'; authRouter.get(callbackUrl, .... }); authRouter.get(loginUrl, function(req, res, next){ // Make call to OAuth server res.redirect("http://authserver/?callback=" + callbackUrl); }); return authRouter; } 

问题是, authRouter不知道它实际上挂载在/admin所以它没有办法将其前置到callback参数。

有没有什么办法可以在getAuthRouter函数中获取?

使用req.url

你可以使用req.url
如果你在http://example.com/test/here它会返回/test/here

把它作为论点:

但在你的情况下,你也可以传递基础url作为你的中间件的参数:

 function getAuthRouter(baseUrl) { var authRouter = express.Router(); baseUrl = baseUrl || ""; // Default // Setup auth routes var callbackUrl = baseUrl + '/oauth/callback'; var loginUrl = '/login'; // ... } 

然后你会这样称呼它:

app.use('/admin', getAuthRouter("/admin"));

要么

app.use ('/', getAuthRouter()); // Calls default

使用request.baseUrl ,它是为这个用例devise的。