从nodejs request.url pathname构建路径

时间:2012-04-12 22:26:14

标签: node.js

我想从node.js中的/ok/ä.txt获取/very///bad/%D0%B9/../../../../../request/../ok/%C3%A4.txt我发现了以下方法:

var url = require('url'), path = require('path');
require('http').createServer(function (request, response) {

    var file = null;
    try {
        file = path.normalize(decodeURI(url.parse(request.url).pathname));
    } catch (e) {
    }

    console.log(file);
    response.end();
}).listen(3002, '127.0.0.1');

是否存在更好的方法,没有try / catch块?

1 个答案:

答案 0 :(得分:0)

我认为你可以摆脱try..catch阻止,因为path.normalizedecodeURI永远不会抛出错误而url.parse只会抛出错误,如果参数不是类型为string

...
if (typeof url !== 'string') {
    throw new TypeError("Parameter 'url' must be a string, not " + typeof url);
}
...

由于request.url始终属于string类型,因此也不会发生。