如何读取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`
在任何一种情况下,只要文件存在并且在您的读取权限范围内,两条路径都应该可以正常工作。
我已经在节点上创建了一个服务器,如果该页面在工作文件夹中,我可以呈现一个 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`
在任何一种情况下,只要文件存在并且在您的读取权限范围内,两条路径都应该可以正常工作。