14

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;

router.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>

I'm trying to store the file path in a variable and then feed it ti readFileSync() function, but this gives me fllowing error in the console.

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)

but if I enter the path "D:/nodejs/file_upload/view/index.html" in the function directly then it shows me the page in the browser.

I stored the index.html file in the view folder

4
  • Maybe try fs.readdir() and loop through the array it hands back? Commented Sep 17, 2014 at 6:50
  • 3
    possible duplicate of Using Node.js I get, "Error: EISDIR, read" Commented Sep 17, 2014 at 7:51
  • 3
    Most likely, you're trying to read D:/nodejs/file_upload/view instead of D:/nodejs/file_upload/view/index.html. Commented Sep 17, 2014 at 7:52
  • 1
    If you want to serve static files, consider using some static module like st or serve-static. Commented Sep 17, 2014 at 7:55

2 Answers 2

66

EISDIR error occurs when you try to open a file, but the path given is a directory. See related question and answer: Using Node.js I get, "Error: EISDIR, read".

To debug this I would log to console the variable directpath and I would assume that it is pointing to a directory, not a file. Correctly setting this variable to the intended path should solve your problem.

Sign up to request clarification or add additional context in comments.

Comments

0

I've used fs.lstatSync(file).isFile() to filter files from folders. Maybe you can use it as well?

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.