javascript - Node.JS readFileSync() 函数

标签 javascript node.js

index.js

var server = require("./server");
var router = require("./router");

server.start(router.route);

server.js

//Script to start a server

var http = require("http");
var url = require("url");
var fs = require("fs");

function start(route) {
    function onRequest(request, response) {

        var pathname = url.parse(request.url).pathname;

        route(pathname, response, fs);

    }

    http.createServer(onRequest).listen(8888);
    console.log("Server has started.");
}

exports.start = start;

路由器.js

function route(pathname, response, fs) {

    var regex = new RegExp('^/view/?$');

    var directpath = "D:/nodejs/file_upload" + pathname;

    var voo = fs.readFileSync(directpath);

    if(regex.test(pathname)){

        response.writeHead(200, {"Content-Type": "text/html"});
        console.log("About to route a request for " + pathname);
        response.end(voo);

    } else{

        response.writeHead(404);
        response.end("<br/>404, file not found");

    }
}

exports.route = route;

index.html

<!DOCTYPE html>
<html>
    <body>
        <p>Hello My friend </p>
    </body>
</html>

我试图将文件路径存储在一个变量中,然后将它提供给 readFileSync() 函数,但这给了我在控制台中的错误。

Error: EISDIR, illegal operation on a directory
    at Object.fs.readSync (fs.js:487:19)
    at Object.fs.readFileSync (fs.js:326:28)
    at route (D:\nodejs\file_upload\router.js:7:15)
    at Server.onRequest (D:\nodejs\file_upload\server.js:15:6)
    at Server.emit (events.js:98:17)
    at HTTPParser.parser.onIncoming (http.js:2108:12)
    at HTTPParser.parserOnHeadersComplete [as onHeadersComplete] (http.js:121:23
)
    at Socket.socket.ondata (http.js:1966:22)
    at TCP.onread (net.js:527:27)

但如果我直接在函数中输入路径“D:/nodejs/file_upload/view/index.html”,那么它会在浏览器中显示页面。

我将 index.html 文件存储在 View 文件夹中

最佳答案

EISDIR 尝试打开文件时发生错误,但给出的路径是目录。查看相关问答:Using Node.js I get, "Error: EISDIR, read" .

为了调试这个,我会登录到控制台变量 directpath 并且我会假设它指向一个目录,而不是一个文件。将此变量正确设置为预期路径应该可以解决您的问题。

关于javascript - Node.JS readFileSync() 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25883775/

相关文章:

javascript - 使用纯 JavaScript 更改导航列表中的选定列表元素

javascript - 谷歌脚本 : appendRow always on top of the sheet

javascript - Mongodb + Node : When to close

javascript - 无法在 javascript (node.js) 中实例化对象

node.js - Bitbucket 管道运行 npm 失败

javascript - 用于聊天室的 AJAX、jQuery、javascript

javascript - sessionStorage 在页面之间不持久

javascript - jQuery .slideToggle() 重复

javascript - gulpjs 添加回以前忽略的路径?

c# - 我可以使用 Node.js 调用 C# 方法吗?