如何读取nodeJS中main/working文件夹外的文件?

How to read a file outside main/working folder in nodeJS?

我已经在节点上创建了一个服务器,如果该页面在工作文件夹中,我可以呈现一个 HTML 页面。

但是,当我将路径更改为不同的文件夹时,无法呈现页面,我知道这与我分配的路径有关。

这是 main/working 文件夹的路径:


function OnRequest(request , response){
   fs.readFile('./index.html' , null , function(error , data){
       if (error){
           response.writeHead(404);
           console.log("Ups, something is wrong :/");

       } else {
           response.writeHead(200)
           response.write(data)
           response.end();
       }
   })
};

这是主文件夹外文件夹的路径:

function OnRequest(request , response){
   fs.readFile('c:\Users\Simon\Desktop\Projectos - Site da Pintura\Galeria.html' , null , function(error , data){
       if (error){
           response.writeHead(404);
           console.log("Ups, something is wrong :/");

       } else {
           response.writeHead(200)
           response.write(data)
           response.end();
       }
   })
};

这是我得到的错误:

[Error: ENOENT: no such file or directory, open 'C:\Users\Simon\Desktop\Projectos - Criar um Servidor\UsersSimonDesktopProjectos - Site da PinturaGaleria.html'] {
  errno: -4058,
  code: 'ENOENT',
  syscall: 'open',
  path: 'C:\Users\Simon\Desktop\Projectos\8 - Criar um Servidor\UsersSimonDesktopProjectos\x07 - Site da PinturaGaleria.html'
}

这让我觉得我需要更改该对象内的路径,因为它显然是错误的。但是我该怎么做呢?

看来我找到了解决办法。 :

我认为问题之一是 - 即使我在 readfFile() 方法中给出了我想打开的文件的完整路径 - 该路径正在添加到某个对象中已经存在的路径,结果是:

path: 'C:\Users\Simon\Desktop\Projectos\8 - Criar um Servidor\UsersSimonDesktopProjectos\x07 - Site da PinturaGaleria.html'
}

通过使用 path.resolve() 方法,问题似乎消失了,我现在可以从我的主文件夹外部加载 HTML 文件,甚至不必写完整路径:

path.resolve('../7 - Site da Pintura/Galeria.html')

它奏效了:

function OnRequest(request , response){
   fs.readFile(path.resolve('../7 - Site da Pintura/Galeria.html'), null , function(error , data){
       if (error){
           response.writeHead(404);
           console.log(error);

       } else {
           response.writeHead(200)
           response.write(data)
           response.end();
       }
   })
};

您的问题与相对路径或绝对路径有关,是字符串转义反斜杠 (\)。换句话说,您不能简单地在字符串中使用反斜杠,因为它们用于转义字符,例如 \'(不关闭字符串封装的引号)或 \n(新行)。

要在字符串中使用反斜杠,您需要编写 \:

const path = `C:\Users\Simon\Desktop\Projectos\7 - Site da Pintura\Galeria.html`

或者使用 String.raw 来防止反斜杠转义:

const path = String.raw`C:\Users\Simon\Desktop\Projectos - Site da Pintura\Galeria.html`

在任何一种情况下,只要文件存在并且在您的读取权限范围内,两条路径都应该可以正常工作。