是否有可能获得快速路由器的基本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的。