我希望在对网址执行任何路由之前,让节点(使用express for routing)解析网址中所有../
符号的出现。
例如,如果在网址/a/b/../c/d/e/../../f
上查询了apache,它将首先解析所有../
符号,并最终投放位于/a/c/f
的任何内容。
但是,对于node + express,/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!' });
});
如何让node + express解析网址中的../
符号?
答案 0 :(得分:1)
尝试添加(先生成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应该像你期望的那样解析路径。
答案 1 :(得分:1)
您可以使用路径模块加入网址段:
const path = require("path");
app.use(function(req, res, next) {
const pathArr = req.url.split("/");
req.url = path.join.apply(null, pathArr);
next();
});
将其重新分配给网址将允许任何后续的快速匹配器继续处理它,而无需手动控制任何服务。