javascript - 我的 Node.js 简单 Web 服务器无法访问父文件夹

标签 javascript node.js filesystems

昨天我玩了一下 Node.js,我的第一个想法是制作一个简单的 Web 服务器,以这种方式加载带有一些 js 文件的 html 页面:

var http = require('http'),
    fs = require('fs'),
    path = require('path');

http.createServer(function(request, response) {
    console.log('request starting for: ' + request.url);
    var filePath = path.join('.', request.url);
    if (filePath === './') {
        filePath = './aPage.html';
    }

    path.exists(filePath, function(exists) {
        if (exists) {
            var extname = path.extname(filePath);
            var contentType = 'text/html';
            switch (extname) {
            case '.js':
                contentType = 'text/javascript';
                break;
            case '.css':
                contentType = 'text/css';
                break;
            }

            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');
                }
            });
        }
        else {
            console.log('Something goes wrong ;(');
            response.writeHead(404);
            response.end();
        }
    });
    console.log('Server running!');
}).listen('8080', '0.0.0.0');

一切正常。

我决定把这个js脚本放在一个子目录中,修改以下行:


...

var filePath = path.join('..', request.url);
    if (filePath === '../') {
        filePath = '../aPage.html';
    }
...

但是path.exists()无法检查html页面和其他文件是否存在。

你能告诉我我的错是什么吗(我以为这只是一个微不足道的改变)?

谢谢。

最佳答案

我的猜测是,您尝试直接从父文件夹而不是子目录运行 js 脚本。

例如:如果您位于目录 foo 中,并且您的 server.js 位于子目录 bar 中,
那么如果你运行node bar/server.js,那么..将指向foo的父级,而不是bar的父级,这就是找不到文件的原因。

foo
  +---bar
  |     +----- server.js
  +---- aPage.html

您可以尝试cd进入bar并运行node server.js

或将脚本中的../aPage.html更改为__dirname/../aPage.html

PS:可以使用path.resolve获取绝对路径。

关于javascript - 我的 Node.js 简单 Web 服务器无法访问父文件夹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9061778/

相关文章:

javascript - 将 Node 数组传递给 ejs 文件中的 JavaScript

node.js - express-http-proxy代理来响应js应用,但没有任何内容

javascript - 可能的node.js内存过度使用w/express服务器和pm2

javascript - 使用 Netbanx API

javascript - 构建新版本的 ngx-charts

javascript - 使用delete或通过在Javascript中分配null来删除对象?

javascript - Node.js、流、文件和错误处理

linux - 被另一个用户移动后的当前目录

c++ - 当应用程序崩溃时,linux 缓冲区缓存的行为如何?

java - SystemFile.getLocal() 的 jar 文件是什么?