2014-09-17 11 views
11

index.jsNode.JS readFileSync() Funktion

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> 

Ich versuche, den Dateipfad in einer Variablen zu speichern und dann an die Funktion readFileSync() zu leiten, aber das führt zu einem Fehler in der Konsole.

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) 

aber wenn ich den Weg geben „D: /nodejs/file_upload/view/index.html“ in der Funktion direkt dann zeigt es mir die Seite im Browser.

ich die Datei index.html in der Ansicht Ordner gespeichert

+0

Vielleicht versuchen 'fs.readdir()' und Schleife durch das Array es zurückgibt? – CaffeineAddiction

+3

mögliches Duplikat von [Mit Node.js bekomme ich, "Fehler: EISDIR, lesen"] (http://stackoverflow.com/questions/20417118/using-node-js-i-get-error-eisdir-read) –

+3

Wahrscheinlich versuchen Sie 'D:/nodejs/file_upload/view' statt' D:/nodejs/file_upload/view/index.html' zu lesen. –

Antwort

52

EISDIR Fehler tritt auf, wenn Sie versuchen, eine Datei zu öffnen, aber der angegebene Pfad ist ein Verzeichnis. Siehe zugehörige Frage und Antwort: Using Node.js I get, "Error: EISDIR, read".

Um dies zu debuggen würde ich loggen, um die Variable directpath zu trösten, und ich würde annehmen, dass es auf ein Verzeichnis zeigt, keine Datei. Wenn Sie diese Variable korrekt auf den beabsichtigten Pfad setzen, sollte Ihr Problem gelöst werden.