Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.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 - Fatal编程技术网

Node.js不正确的路径问题

Node.js不正确的路径问题,node.js,Node.js,当我执行fs.readFile(文件…时,我会出现以下错误: {[错误:enoint,打开'foundation/css/normalize.css'] 呃:34, 代码:'enoint' 路径:'foundation/css/normalize.css'} 我是否必须根据链接的HTML文件或运行服务器和路由器的node.js文件的位置来路由路径 不,我没有使用express,“使用express”不是一个可以接受的答案 编辑 @BenjaminGruenbaum的最后一条评论。我不确定你所说

当我执行
fs.readFile(文件…
时,我会出现以下错误:

{[错误:enoint,打开'foundation/css/normalize.css']

呃:34,

代码:'enoint'

路径:'foundation/css/normalize.css'}

我是否必须根据链接的HTML文件或运行服务器和路由器的node.js文件的位置来路由路径

不,我没有使用express,“使用express”不是一个可以接受的答案


编辑

@BenjaminGruenbaum的最后一条评论。我不确定你所说的HTTP响应是什么意思,但我的代码逻辑如下:我通过URI加载index.html,当它
读取文件时,它会递归地遍历其他链接文件。我有一个脚本将其分解,以正确显示正确的
内容类型。我会把它包括在这里,因为它太长了,无法发表评论:

function route(handle, pathname, response, request){
// console.log("About to route a request for " + pathname);

if (typeof handle[pathname] === "function"){        
    handle[pathname](response, request);
    } else {

    // console.log('NON HTML');
    // console.log(pathname);

    var file_path = "";
    var mimes = {
        'css':  'text/css',
        'js':   'text/javascript',
        'htm':  'text/html',
        'html': 'text/html',
        'png': 'image/png',
        'jpg': 'image/jpg',
        'jpeg': 'image/jpeg'
    };

    // parses the url request for a file and pulls the pathname
    var url_request = url.parse(request.url).pathname;      
    // console.log('URL REQUEST');
    // console.log(url_request);

    // finds the placement of '.' to determine the extension    
    var tmp  = url_request.lastIndexOf(".");
    // determines the extension by uing .substring that takes everything after '.'
    var extension  = url_request.substring((tmp + 1));
    // console.log('EXTENSION');
    // console.log(extension);


    //set path of static pages
    if (extension === 'css' || extension === 'js' || extension === 'htm' || extension === 'html' || extension === 'png' || extension === 'jpg' || extension === 'jpeg'){

        // console.log('LOAD STATIC PAGE');
        file_path = url_request.replace("/", "");
        // console.log(file_path);
        // console.log();
    }

    //load needed pages and static files
    fs.readFile(file_path, function (error, data){
        if(error){
            // console.log("AM I DEAD");

            // console.log(error);
            // console.log();
            response.writeHeader(500, {"Content-Type": "text/html"});  
            response.write("<h1>FS READ FILE ERROR: Internal Server Error!</h1>");    
        }
        else{
            response.writeHeader(200, {"Content-Type": mimes[extension]});  

            console.log('SHOULD BE SUCCESS')
            console.log(mimes[extension]);
            // console.log(data);
            response.write(data);
        }

        response.end();  
    });
    response.end();
}
}

exports.route = route;
我为有点草率的缩进道歉


最终编辑:

这个愚蠢局面的最终解决方案可以在我的以下问题中找到:


非常感谢@BenjaminGruenbaum提供了一个Noob

,您将不得不使用相对于NodeJS文件的路径(更具体地说是入口点),而不是客户端HTML

这就像它在bash脚本、Python和几乎任何其他语言中使用sane API一样,该API对操作系统中的本机文件系统函数进行sane调用

事实上,客户端HTML与节点中的路径无关——在节点的立场上,它只是以HTTP响应发送给客户端的文本。它根本不知道服务器的内部文件系统


(此外,我不认为像express这样的东西会有什么帮助)

谢谢。给我5分钟,我会试试。我只是把它放在了关于express的文章中,因为这是对任何节点问题的最常见的回答。它会让meLet的隔离程序出错。创建一个名为server.js的新文件,在同一个目录中创建一个名为
自述文件
的文件,并编写“Hello World”在它里面。server.js所做的就是在自述文件上调用fs.readFile。现在玩路径,做
。/dirname/README
-这仍然有效。现在试着把自述文件放到一个新目录中,看看路径仍然有效。(顺便说一下,我刚刚在我的框中验证了所有这些).既然您确信问题不在于路径,请尝试调试它-在路径上打印控制台日志并在终端中手动打开,拼写错误在我身上发生了几十次:)请澄清,路径应该与脚本的执行位置相关,不一定是脚本在文件系统上的位置。@JDillon522同样,NodeJS不关心它发送给浏览器的内容。内容类型(通过添加标题btw:)将其设置为正确的值)意味着我们到达了客户端,问题不再是eNONT。但是,如果您收到该消息,则意味着您已经解决了原始问题:)@JDillon522您在哪里向头添加mime类型?为了清楚起见,它应该出现在HTTP响应上。
else{
            response.writeHeader(200, {"Content-Type": mimes[extension]});  

            console.log('SHOULD BE SUCCESS')
            console.log(mimes[extension]);
            // console.log(data);
            response.write(data);
        }