节点,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问题。