在应用程序中使用中间件expressjsredirect

我正在尝试做一个处理url别名的中间件,我现在正在做的是:

// [...] module.exports = function() { return function(req, res, next) { // getAlias would get an object {alias:"alias/path",source:"/real/path"} or null var alias = getAlias(req.url); if(alias) { req.url = alias.source; } next(); }; }; 

所以basicaly我正在寻找一个商店的请求的url,如果它被发现作为一个别名我改变request.url到该别名的源path,以便快递调用正确的路线。

问题是request.url和request.path具有相同的值,但在request.url工作时,更改request.path不起作用。 另外我不确定哪一个我必须再次testing。

当我与request.url交互时,事情就会起作用,但只是想确保我正确地做到了这一点。

有什么想法吗 ?

重写req.url属性是内部重新路由请求的正确方法。 这就是为什么有一个req.originalUrl的情况下,一个人改变原来的url。

这是Express文档为req.originalUrl指出的req.originalUrl

这个属性很像req.url ,但它保留了原始的请求url,允许你为了内部路由的目的而自由地重写req.url

req.url属性没有logging,但是从上面的语句中可以推断出它的意思是按照你解释的方式使用。 在某些Expresstesting中也以这种方式使用。

您可以使用run-middleware模块。 只需使用URL&method&data运行你想要的处理程序。

https://www.npmjs.com/package/run-middleware

例如:

 module.exports = function() { return function(req, res, next) { // getAlias would get an object {alias:"alias/path",source:"/real/path"} or null var alias = getAlias(req.url); if(alias) { res.runMiddleware(alias,(status,data)=>(res.status(status).send(data)) } next(); }; };