0

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

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 块?

4

1 回答 1

0

我认为您可以摆脱该try..catch块,因为永远不会抛出错误,并且path.normalize仅在参数不是类型时才抛出错误:decodeURIurl.parsestring

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

并且因为request.url始终是string不会发生的类型。

于 2012-04-12T22:42:00.493 回答