如何解析Node中的路径

时间:2014-06-19 16:41:46

标签: node.js filepath

我有一个节点服务器正在运行,我正在试图弄清楚如何传达我的服务器上的文件路径(以及如何响应获取这些资源的请求),这样我基本上有一个静态文件服务器,但是我可以根据请求参数(POSTGET等)控制的。现在我的文件结构设置如下(dir_表示目录):

Main Folder:
    server.js
    dir_content:
           home.html
           style.css
           dir_uploads:
               dir_finished:
                    file1.txt
                    file2.txt

要回复我的请求,我的代码如下所示:

http.createServer(function(request, response) {

if(request.method.toLowerCase() == 'get') {
    var filePath = './dir_content' + request.url;
    if (filePath == './dir_content/') {
        filePath = './dir_content/home.html';
    }
fs.exists(filePath, function (exists) {
        if (exists) {
            fs.readFile(filePath, function (error, content) {
                if (error) {
                    response.writeHead(500);
                    response.end();
                }
                else {
                    response.writeHead(200, {'Content-Type': contentType});
                    response.end(content, 'utf-8');
                }
            })

这允许我使用正确的页面(如果存在)响应任何GET网页请求,但它最终会扭曲我服务器上资源的路径。

示例:尝试检索file1.txt的人会导航到localhost:8080/dir_content/dir_uploads/dir_finished/file1.txt

但我的代码会在其请求中添加额外的./dir_content,使其看起来像是在尝试访问:

localhost:8080/dir_content/dir_content/dir_uploads/dir_finished/file1.txt

是否有更简单的方法可以为 WITHOUT 外部节点模块中的资源提供准确的绝对路径(通过某种方式设置某种基本目录)?

1 个答案:

答案 0 :(得分:0)

乍一看,您似乎没有考虑request.url,可能包括dir_content前缀。如果确实如此,那么我建议进行一个简单的正则表达式测试,看它是否存在:

if (!/^[\/]?dir_content\//i.test(request.url))
    filePath = '/dir_content' + request.url;

filePath = '.' + filePath;

简单的小提琴演示正则表达式:

http://jsfiddle.net/97Q43/