2016-11-30 6 views
0

Я пытаюсь отобразить index.html, но я получаю ошибку enoent, даже с правильным путем.Node.js - res.sendFile - Ошибка: ENOENT, но правильный путь

//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); 

Я также попытался

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

Если я использую

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

, то это работает, но я вижу предупреждение, что говорит SendFile является устаревшим, и я должен использовать SendFile.

+1

Что происходит, когда вы 'console.log' путь, который вы помещаете в' sendFile'? Вы получаете путь, который ожидаете? – Aurora0001

+0

Это дает мне путь '/Users/me/Desktop/test/app/public/views/index.html', и он должен быть правильным путем. – Alex

+0

Не могли бы вы включить ** полное сообщение об ошибке **? Кажется странным, что путь правильный, но он все еще не работает. – Aurora0001

ответ

2

Попробуйте добавить:

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

Это должно прояснить, является ли путь файла, что вы ожидаете, что это будет

+0

Это работало, теперь я вижу, что путь был неправильным, он искал представления в папке в папке, а не в папке. Спасибо всем за помощь;) – Alex

0

Попробуйте использовать опцию корня, что сделал это для меня:

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

{Ошибка: ENOENT: нет такого файла или каталога, stat '/ Users/me/Desktop/test/app/public/views/index. HTML ' на Error (родной) ERRNO: -2, код: 'ENOENT', системный вызов: 'стат', путь:' /Users/me/Desktop/test/app/public/views/index.html ', expose: false, statusCode: 404, Статус: 404} – Alex

+0

Есть ли файл? – xShirase

0

Проблема заключается в том, что вы определили статический файл промежуточного уровня, а затем вы определяете маршрут перед этим, который пытается справиться с выступающей статические файлы (поэтому статическое файловое промежуточное ПО на самом деле ничего не делает). Поэтому, если вы хотите, чтобы res.sendFile что-то от маршрута, вам нужно было бы указать либо абсолютный путь к нему. Или вы могли бы просто удалить маршрут app.get('*', ...) и позволить прямому промежуточному программному обеспечению выполнять свою работу.

+0

'res.sendFile' всегда принимает абсолютный путь в соответствии с документами API:« Если в объекте параметров не указан параметр root, путь должен быть абсолютным путем к файлу.« – xShirase

+0

ОК. Я исправлю ответ, но главное было то, что в первую очередь не нужно« res.sendFile ». Маршрут должен быть удален, чтобы определенное промежуточное ПО могло выполнять свою работу. – Kevin

+0

yup, согласился что – xShirase

0

вы можете попробовать ниже код

// 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'))); 

Ручка апи вызов

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'); 
    } 

}); 

 Смежные вопросы

  • Нет связанных вопросов^_^