节点,表达,处理" .."网址中的符号

时间:2017-04-25 16:25:18

标签: node.js express

我希望在对网址执行任何路由之前,让节点(使用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解析网址中的../符号?

2 个答案:

答案 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();
});

将其重新分配给网址将允许任何后续的快速匹配器继续处理它,而无需手动控制任何服务。