2012-04-12 168 views
0

我想在node.js中从/very///bad/%D0%B9/../../../../../request/../ok/%C3%A4.txt获得/ok/ä.txt。我发现了以下方法:从nodejs构建路径request.url路径名

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

回答

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这也不会发生。