在应用程序中使用中间件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(); }; };