节点,expression,在URL中处理“..”符号
我正在寻找获得节点(使用快递路由)来解决在url上执行任何路由之前,所有出现的../
符号的url。
例如,如果在/a/b/../c/d/e/../../f
处查询apache,它将首先parsing所有的../
符号,并最终提供位于/a/c/f
。
然而,使用node + express, /a/c/f
/a/b/../c/d/e/../../f
/a/c/f
/a/b/../c/d/e/../../f
是从字面上得到的,并且不会匹配/a/c/f
路由。 我的问题是,下面的代码不会响应像/a/b/../c/d/e/../../f
这样的请求:
app.get('/a/c/f', function(req, res) { return res.status(200).json({ msg: 'it worked!' }); });
我怎样才能得到节点+快递解决../
符号在url中?
您可以使用path模块来joinurl细分:
const path = require("path"); app.use(function(req, res, next) { const pathArr = req.url.split("/"); req.url = path.join.apply(null, pathArr); next(); });
将其重新分配给url将允许任何后续的快速匹配器继续处理,而无需手动控制任何服务。
尝试添加(从第一个app.get(...)
)这个中间件:
var path = require('path'); // some other code app.use(function(req, res, next) { var parsedPath = path.resolve(req.path); var root = req.protocol + '://' + req.get('Host'); var redir = path.join(root, parsedPath); console.log(redir); if (parsedPath !== req.path) { res.redirect(parsedPath); } else { next(); } });
这应该是不需要的,因为express + node应该像你期望的那样解决path问题。