Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 如何解析节点中的路径_Node.js_Filepath - Fatal编程技术网

Node.js 如何解析节点中的路径

Node.js 如何解析节点中的路径,node.js,filepath,Node.js,Filepath,我有一个正在运行的节点服务器,我试图弄清楚如何将路径传递到我的服务器上的文件(以及如何响应获取这些资源的请求),这样我基本上有一个静态文件服务器,但我可以根据请求参数来控制它(POST或get等)。现在我的文件结构设置如下(dir\uu表示目录): 为了响应我的请求,我的代码如下所示: http.createServer(function(request, response) { if(request.method.toLowerCase() == 'get') { var fileP

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

为了响应我的请求,我的代码如下所示:

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\u content/dir\u uploads/dir\u finished/file1.txt

但是我的代码会在他们的请求中添加额外的
/dir\u内容
,使其看起来像他们试图访问:

localhost:8080/dir\u content/dir\u content/dir\u uploads/dir\u finished/file1.txt


是否有一种更简单的方法来提供到文件夹中资源的精确绝对路径,而不包括外部节点模块(通过某种方式设置一种基本目录)?

乍一看,似乎您没有考虑请求。url可能包括dir\u内容前缀。如果这是真的,那么我建议进行一次简单的正则表达式测试,看看它是否存在:

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

filePath = '.' + filePath;
使用Simple fiddle演示正则表达式:

只需使用节点的路径库:
if (!/^[\/]?dir_content\//i.test(request.url))
    filePath = '/dir_content' + request.url;

filePath = '.' + filePath;