2016-11-30 4 views
0

Ich versuche, eine index.html rendern, aber ich bekomme den Fehler enoent, auch mit dem richtigen Pfad.Node.js - res.sendFile - Fehler: ENOENT, aber der Pfad ist korrekt

//folders tree 
test/server.js 
test/app/routes.js 
test/public/views/index.html 

//routes.js  
app.get('*', function(req, res) { 
    res.sendFile('views/index.html'); 
}); 


//server.js 
app.use(express.static(__dirname + '/public')); 
require('./app/routes')(app); 

Ich habe auch versucht

res.sendFile(__dirname + '/public/views/index.html'); 

Wenn ich

res.sendfile('./public/views/index.html'); 

verwenden dann funktioniert es, aber ich sehe eine Warnung, die sagt sendfile ist veraltet, und ich habe Sendfile zu verwenden.

+1

Was passiert wenn Sie 'console.log' den Pfad, den Sie in' SendFile' setzen? Hast du den Weg, den du erwartest? – Aurora0001

+0

Es gibt mir den Pfad '/Users/me/Desktop/test/app/public/views/index.html' und es soll der richtige Pfad sein – Alex

+0

Könnten Sie die ** vollständige ** Fehlermeldung dann? Es scheint seltsam, dass der Pfad korrekt ist, aber immer noch nicht funktioniert. – Aurora0001

Antwort

2

Versuchen Zugabe:

var path = require('path'); 
var filePath = "./public/views/index.html" 
var resolvedPath = path.resolve(filePath); 
console.log(resolvedPath); 
return res.sendFile(resolvedPath); 

Diese klären sollte, ob der Dateipfad ist, was Sie erwarten, dass es

+0

Dieser funktionierte, sehe ich jetzt, dass der Pfad nicht korrekt war, es suchte die Ordneransichten in der Ordner-App statt dem öffentlichen Ordner. Danke an alle für die Hilfe;) – Alex

0

Versuchen Sie, die root-Option, die es für mich getan hat:

var options = { 
    root: __dirname + '/public/views/', 
}; 

res.sendFile('index.html', options, function (err) { 
    if (err) { 
     console.log(err); 
     res.status(err.status).end(); 
    } 
    else { 
     console.log('Sent:', fileName); 
    } 
    }); 
+0

{Fehler: ENOENT: keine solche Datei oder Verzeichnis, stat '/ Benutzer/me/Desktop/test/app/public/views/index. html ' bei Error (nativ) errno: -2, Code: 'ENOENT', syscall: 'stat', Pfad:' /Users/me/Desktop/test/app/public/views/index.html ', expose: false, statusCode: 404, status: 404} – Alex

+0

Gibt es dort eine Datei? – xShirase

0

Das Problem ist, dass Sie statische Datei Middleware definiert haben, aber dann definieren Sie eine Route vor, dass die zu handhaben versucht dient die statischen Dateien (also macht die statische File-Middleware hier eigentlich nichts). Wenn Sie also res.sendFile etwas von einer Route möchten, müssen Sie entweder einen absoluten Pfad angeben. Oder Sie könnten einfach die Route app.get('*', ...) entfernen und die Express Middleware ihre Arbeit machen lassen.

+0

'res.sendFile' nimmt immer einen absoluten Pfad gemäß der API-Dokumentation:" Wenn die Option root nicht im options-Objekt festgelegt ist, muss path ein absoluter Pfad zur Datei sein." – xShirase

+0

OK Ich werde die Antwort korrigieren, aber mein Hauptpunkt war, dass es nicht nötig ist," res.sendFile "an erster Stelle zu platzieren. Die Route sollte entfernt werden, damit die definierte Middleware ihre Arbeit machen kann. – Kevin

+0

yup, einverstanden dass – xShirase

0

werden Sie unter Code versuchen

// view engine setup 
app.set('views', path.join(__dirname, 'views')); 
app.engine('html', require('ejs').renderFile); 
app.set('view engine', 'html'); 
app.use(express.static(path.join(__dirname, 'public/views'))); 

Griff api Anruf

app.use('/', function(req, res, next) { 
    console.log('req is -> %s', req.url); 
    if (req.url == '/dashboard') { 
     console.log('redirecting to -> %s', req.url); 
     res.render('dashboard'); 
    } else { 
     res.render('index'); 
    } 

}); 
Verwandte Themen